Looking at the big picture, I can see that object orientation is not a paradigm, but a set of mechanics we can cherry pick. Yet we continue to treat it as if it were a unified concept.
I think this is why "OOP" survived this long. Without a definite definition everyone can agree on, its meaning keeps mutating beyond recognition as we change our programming practices.
Fentieket magam is rendszeresen megfogalmazom az OOP körül folyó viták kapcsán. Ebből is következik, hogy az OOP sosem fog meghalni, talán csak végre felismerjük, hogy sosem létezett.
Együtt valamiért mégsem a leghatékonyabb, lásd pl. a Go-ból is kihagyták az öröklődést, de a funkcionális programozásban is legfeljebb egy-kettőt használnak.
És honnan tudjuk, hogy azoknak van igaza, akik kihagynak egy eszközt, és nem azoknak, akik implementálnak? A Goban kivételek, generikus típusok és function overloading sincs. Ebből az elsőt második körben részben mégis behozták, a másodikat lehetséges, hogy egyszer behozzák, a harmadikat meg azért hagyták ki, mert így egyszerűbb a fordító dolga. Ettől bármelyik rossz eszköz lesz?
Ha a panic-ra gondolsz, akkor az egy nem ajánlott módszer. Azt is alátámasztották, miért jobb az általuk használt hibakezelés, mint a kivételek. A kivételeket te is kritizáltad korábban, mert lassúak.
Az, hogy kinek van igaza, az idő dönti el. A nyelvekben a fenti eszközök jóideje léteztek, a Gót tudatos tervezés előzte meg, és így döntöttek a kihagyásukról.
A kivételeket te is kritizáltad korábban, mert lassúak.
Elsősorban nem azért, nekem a statikus analízis hiánya a bajom, de ennek elvi akadálya nincs.
Az, hogy kinek van igaza, az idő dönti el. A nyelvekben a fenti eszközök jóideje léteztek, a Gót tudatos tervezés előzte meg, és így döntöttek a kihagyásukról.
És mielőtt jóideje léteztek, az előtt nem léteztek, így egyelőre az idő már döntött is. Persze ez nem azt jelenti, hogy később nem változhat a felfogásunk, aztán egy idő után újra, csak egy-egy nyelv választásaival nem nagyon lehet bármit is alátámasztani.
És mielőtt jóideje léteztek, az előtt nem léteztek, így egyelőre az idő már döntött is.
Ezt az érvelést nem gondolhatod komolyan.
egy-egy nyelv választásaival nem nagyon lehet bármit is alátámasztani
A Go két fő tervezője Rob Pike és Ken Thompson. Rob Pike több mint harminc éve foglalkozik programozási nyelvekkel, és tervezett is párat. Ken Thompson 45 éve alkotta meg a C elődjét, a B-t, majd részt vett a C elkészítésében.
Ezek az emberek pontosan tudják, hogy mit miért tesznek, amikor programozási nyelvről van szó.
Te sem gondolhatod komolyan, hogy véletlenül születtek meg ezek az eszközök.
A Go két fő tervezője Rob Pike és Ken Thompson. Rob Pike több mint harminc éve foglalkozik programozási nyelvekkel, és tervezett is párat. Ken Thompson 45 éve alkotta meg a C elődjét, a B-t, majd részt vett a C elkészítésében.
Ezek a nyelvek mind a Bell Labs egykori csapatának igényei szerint, egy bizonyos felhasználási területhez készültek. Nem is nagyon alkalmasak bizonyos komplexitás fölött karbantartható kód írására.
Te sem gondolhatod komolyan, hogy véletlenül születtek meg ezek az eszközök.
Egy szóval sem állítottam. Viszont tudatos tervezési döntés volt, hogy a Góba nem kerültek bele a C++-os sablonok, a kivételkezelés, az öröklődés és társaik. Kipróbálták, nem hozták meg a várt hasznot, így nem emelték bele az eszközkészletbe.
Ezek a nyelvek mind
Nem a B-ről és C-ről beszéltem, hanem a Go-ról. Azokat csak példaként hoztam arra, hogy a Go tervezői már mióta vannak a szakterületen.
Viszont tudatos tervezési döntés volt, hogy a Góba nem kerültek bele a C++-os sablonok, a kivételkezelés, az öröklődés és társaik. Kipróbálták, nem hozták meg a várt hasznot, így nem emelték bele az eszközkészletbe.
És tudatos döntés az is, amikor egy új nyelv meg beemeli őket.
Nem a B-ről és C-ről beszéltem, hanem a Go-ról.
A Go pont ugyanúgy egy minimalista nyelv, ahogy a C is az volt a maga idejében.
Azokat csak példaként hoztam arra, hogy a Go tervezői már mióta vannak a szakterületen.
Ezek a nyelvek mind a Bell Labs egykori csapatának igényei szerint, egy bizonyos felhasználási területhez készültek. Nem is nagyon alkalmasak bizonyos komplexitás fölött karbantartható kód írására.
Mi az a komplexitás, aminek a Go a te definícióid szerint nem felel meg és miért? A C-re valóban igaz, hogy nagyobb projektekre nem feltétlenül a legalkalmasabb választás, bár érdekes módon sok linuxos rutinkönyvtárat mégis ebben írnak.
Mert az egész koncepció rendkívül ingatag lábakon áll. Lásd öröklődés, amit jobb helyeken már igyekeznek elkerülni, mert több problémát okoz, mint amennyit megold. Emellett ahány embert kérdezel, annyiféleképp definiálják az OOP-t.
Az írás arról szól, hogy az OOP egy rosszul definiált fogalom. Te azt hangoztatod, hogy az OOP rossz módszertan, miközben saját bevallásod szerint sem tudod, hogy mi is az (mert rosszul definiált fogalom).
Hogyan lehet egy módszertan jó, ha a világon – kis túlzással – nincs két ember, aki meg tudna egyezni róla, hogy mi is az tulajdonképpen?
Az OOP egy rosszul definiált fogalom, melynek alkotóelemei instabilak (lásd öröklődés) és kontraproduktívak (lásd adatok és hozzájuk kötött függvények). Ha valaki számára ez nem elég intő jel, akkor az végtelenül optimista vagy túlságosan konzervatív.
OK, döglődik, halott.
Mi van helyette?
Azt ne mondjátok, hogy a funkcionális, mert amiben a változó valójában konstans... az nem lesz túl népszerű. :)
Vissza a gyökerekhez, újra elővesszük a procedurális dolgokat?
Vagy merre tovább?
(bocs, nem tudtam végigolvasni az egészet, de átfutva rajta nem láttam, hogy ajánl-e valamit OOP helyett)
Nincs egy út. A procedurális programozással nincs semmi gond, közelebb áll a gondolkodáshoz, mint a funkcionális, bár ez utóbbiban is vannak jó ötletek. Szerintem a kettő keveréke lehet a megoldás.
A funkcionális programozásban átestek a ló másik oldalára, amikor egyáltalán nem bíznak a programozóban, és nem engednek meg állapotot tárolni. Ez első és második hallásra is elég vad dolog.
Procedurális programozásban arra kell ügyelni, hogy a függvényeink lehetőleg ne használjanak globális változókat, azaz ugyanolyan paraméterekkel meghívva mindig ugyanazt az eredményt adják vissza.
Szerintem soha nem az eszköz végül a mérvadó, hanem az aki használja... Egy jó szobrászművász egy egyszerű kalapáccsal és vésővel is jó szobrot csinál, egy rosszabb pedig használhat lézert, akkor is a legjobb esetben valami giccs jön ki a keze alól... Valakik Basic-ben is remekműveket írtak és vannak akik Java-ban, vagy C#-ben is borzalmat hoznak össze. Én nem hiszek az eszközök mindenhatóságában.
Az évek során az OOP egyre összetettebbé vált. Először vala az öröklődés, polimorfizmus, zártság. A négyek bandája ezt megfejelte a tervezési mintákkal, amik közül manapság már nem mindegyik kívánatos (pl. singleton). Ez később kiegészült azzal, hogy ha jó OOP programot szeretnél írni, be kell tartanod a SOLID elveit. Aztán bejött a függőségkezelés, tesztelhetőség.
Így a legjobb programozónak is egyre nehezebb dolga van, ha jó OOP programot szeretne megírni. Szerintem sokkal kifizetődőbb a lehető legegyszerűbb szoftver megírására törekedni, és a lehető legkevesebb és legegyszerűbb eszközt használni.
Mostanában nem először van olyan érzésem, mintha megpróbálnál félremagyarázni dolgokat. Ez nem nehéz, ha kiemelünk valamit a szövegkörnyezetéből.
Ezek közül egyedül a polimorfizmus az, ami nem létezett korábban.
Ez a fentire egy jó példa. Eredetileg így szólt: "Az évek során az OOP egyre összetettebbé vált. Először vala az öröklődés, polimorfizmus, zártság." Ezek az elvek együtt az OOP-ben jelentek meg a Simula 67-ben és a Smalltalkban.
A tervezési minták nem az objektumorientált programozás sajátjai.
Nyilván. De ha elolvasod a wikipédia cikkét, először az OOP-vel kapcsolatban merült fel, de igazán ismertté a fogalmat a négyek tették, és általában az OOP-vel kapcsolatban említik.
Az újabb és újabb elveket nagyon meg kell szűrni, mert nem feltétlenül lesz tőlük egyszerűbb a program, lásd függőségkezelés. A legcélszerűbb egyszerűségre törekedni, mert egyszerű programban lehet a legkevesebbet hibázni.
Mostanában nem először van olyan érzésem, mintha megpróbálnál félremagyarázni dolgokat. … Ez a fentire egy jó példa.
Nincs ilyen szándékom, de nem is látom, hogy hol tennék ilyet.
Ezek az elvek együtt az OOP-ben jelentek meg a Simula 67-ben
Az öröklődés tisztán procedurális nyelvekben is létezik, egyszer majd utánajárok, hol jelent meg először. A zártság alatt nem tudom, mit értesz, ez is egy aluldefiniált fogalom.
először az OOP-vel kapcsolatban merült fel, de igazán ismertté a fogalmat a négyek tették, és általában az OOP-vel kapcsolatban említik.
Az, hogy a négyek írtak egy könyvet pár példával és adtak egy jól hangzó nevet a dolognak, és tették mindezt OOP környezetben, teljesen irreleváns. Ha nem létezne OOP, előbb-utóbbi valaki akkor is írt volna a kódszervezésben viszatérő mintákról.
Az újabb és újabb elveket nagyon meg kell szűrni, mert nem feltétlenül lesz tőlük egyszerűbb a program
Igen, és ezt a szűrést folyamatosan végzi a szakma, például ilyen vitákon keresztül, mint ez. És ennek ellenére ezek az elvek élnek és alkalmazzák őket. Valószínűleg azért, mert beváltak.
#include <stdio.h>
struct A {
int foo;
};
struct B {
struct A a;
int bar;
};
int main() {
struct B b = {.a = {.foo = 1}, .bar = 2};
printf("foo: %d bar: %d\n", ((struct A*)&b)->foo, b.bar);
// és amúgy tényleg int-ből "örököl"
printf("int... %d\n", *(int*)&b);
}
Ha B örökölne A-tól, akkor a b->foo hivatkozás működhetne minden trükközés nélkül. Így csak azért tud működni, mert nem az "ojjektumra" hivatkozol, hanem a memóriában elfoglalt címére. Amennyiben bekerülne B definíciójába, a "struct A a;" elé valami más változó, máris hibás lenne amit írtál. És ugye egy adatstruktúra nincs kőbe vésve, bármikor változhat a szerkezete, ezért nem ajánlott az effajta hivatkozás. (és számold hozzá, hogy van vagy húsz éve, hogy utoljára C-vel foglalkoztam! ;) )
Az, hogy az öröklődés nyelvi szinten hogy jelenik meg, az a nyelv dolga, az öröklődés, mint mechanizmus megoldható. Te kérdezted hogyan lehet :) (és gyakorlatilag a lefele kasztolás teljesen biztonságos, ha tényleg helyesen kasztolható). Amúgy ha nem csinálod feltűnően, akkor észre sem lehet venni:
#include <stdio.h>
struct A {
int foo;
};
struct B {
struct A a;
int bar;
};
void printFoo(struct A *a) {
printf("foo: %d\n", a->foo);
}
void printBar(struct B *b) {
printf("bar: %d\n", b->bar);
}
int main() {
struct B b = {.a = {.foo = 1}, .bar = 2};
printFoo(&b);
printBar(&b);
}
Ha ez így, ebben a formában működik... Számomra legalábbis hajmeresztő. ;) (és most szigorúan C-ről beszélünk, ugye? Tehát nem C#, C++, egyéb mutációk)
update: linuxon, az ubuntu 14.04-ben lévő gcc-vel nem is fordul le úgy, ahogy mondod. Amíg csak a deklaráció van, addig elfogadja, bár dob rá egy warningot, miszerint
warning: declaration does not declare anything [enabled by default]
Ha viszont hivatkozni próbálok a b-be ágyazott a foo tagjára, arra már error jön. Persze rég nem játszottam C-vel, lehet, hogy én rontom el.
Ha elolvasod a linkelt bekezdést, világossá válik, hogy azokat objektumokra és osztályokra képzelték el és ajánlják alkalmazásra a négyek. Ha procedurálisan vagy funkcionálisan dolgozunk, ezek nagy részének vagy egészének semmi értelme nincsen.
Az OOP tervezési minták egyébként valóban szükségesek, ha valaki objektumorientáltan programozik, mert nélkülük kezelhetetlenné válik a szoftver.
Tekintsd úgy, hogy kijavítottam a linked, hogy ne legyen félrevezető azon olvasóknak, akik még nem csömörlöttek meg ettől a témától. Persze így már semmi értelme a hozzászólásodnak. Meg amúgy se, egy 1 éves kommentre válaszoltál, hogy megint előrángasd a gumicsontot.
A funkcionális programozásban átestek a ló másik oldalára, amikor egyáltalán nem bíznak a programozóban, és nem engednek meg állapotot tárolni. Ez első és második hallásra is elég vad dolog.
Nem a ló túloldalára estek át, ez a funkcionális programozás matematikai gyökerei miatt adott. A gyakorlatban az állapotváltozások minimalizálása és lokalizálása a cél.
Procedurális programozásban arra kell ügyelni, hogy a függvényeink lehetőleg ne használjanak globális változókat, azaz ugyanolyan paraméterekkel meghívva mindig ugyanazt az eredményt adják vissza.
Az állapot lokalizálása adatstruktúrákba az objektumorientált programozás alapja, szemben a klasszikus procedurális megközelítéssel, ahol az alkalmazás globális változóit módosítják az eljárások. Just sayin’.
Az állapot lokalizálása adatstruktúrákba az objektumorientált programozás alapja, szemben a klasszikus procedurális megközelítéssel, ahol az alkalmazás globális változóit módosítják az eljárások.
Ezen már gondolkodtam, hogy tulajdonképpen mi a különbség a globális változó módosításán és a lokalizáláson, aztán a másolat módosításán? Végeredményben semmi, procedurálisban is készíthetsz másolatot a globálisról, és aztán azzal dolgozol.
Egyrészt évente egyszer-kétszer ki lehet bírni, másodrészt nem muszáj elolvasni ezeket, harmadrészt az OOP halálával az ilyen cikkek is el fognak tűnni (tehát érdemes siettetni).
Ez nem igaz, lásd 12-es hozzászólás. A 13-asból pedig következik, hogy az OOP még nagyobb káoszt okoz.
Kicsit kifejtem, hogy érthető legyen: procedurális programozásban alapesetben az egyetlen szervező erő a függvény vagy az eljárás. Ez a későbbiekben kiegészül a függőségkezeléssel (globális változók).
OOP-ben bejönnek az OOP alapjai (öröklődés, polimorfizmus, zártság), a programtervezési minták, a névterek, a SOLID és a függőségkezelés.
No offense, de egyre inkább olyan érzésem van, hogy nem érted az OOP alapjait sem, ezért küzdesz ellene minden lehetséges és lehetetlen eszközzel...
Amiket felsoroltál, azok akkor növelik a káoszt, ha hozzá nem értő (a művészet más kategória!) kezekbe kerül az eszköz.
Szerintem.
Nem zárom ki, hogy igazad van, és tényleg nem értem az OOP alapjait sem, de nem hiszem, hogy így lenne. Csak kicsit olyan a helyzet az OOP földjén, mint egy mesebeli országban, ahol azt mondják, hogy jól mennek a dolgok, folyamatos fejlődés van, aztán mégis sorban vezetnek be újabb és újabb adókat, hogy ezt a látszatot fenn lehessen tartani. Ugyanígy kerülnek be az újabb és újabb rendezőelvek az objektumorientált programokba, és csak akkor lehetsz jó szakember, ha ezeket használod is.
Én nem azt állítom, hogy az OOP egyes részegységei per se rosszak lennének, de egyben az egész már túlságosan elbonyolítja a szoftvert.
Eleve az hibás koncepció, hogy az adatok és a rajtuk műveleteket végző függvények összetartoznak, mert rugalmatlan lesz a szerkezet. Sok OOP-s küzd a coupling ellen, pedig eleve úgy kezdenek, hogy összerendelik ezt a két független halmazt.
Nem zárom ki, hogy igazad van, és tényleg nem értem az OOP alapjait sem
Szerintem nincs elég széles látóköröd, mert kevés nyelvet ismersz, illetve nem nagyon ismered a programozási nyelvek történetét. Ez látszik abból, amikor például a névtereket vagy más konstrukciókat objektumorientáltnak nevezel.
Ugyanígy kerülnek be az újabb és újabb rendezőelvek az objektumorientált programokba, és csak akkor lehetsz jó szakember, ha ezeket használod is.
Úgy gondolod, hogy az újabb és újabb rendezőelvek csak az objektumorientált programozás sajátjai? Hogy más paradigmák teljesek, tökéletesek, és már nincs hova fejlődjenek?
Én nem azt állítom, hogy az OOP egyes részegységei per se rosszak lennének, de egyben az egész már túlságosan elbonyolítja a szoftvert.
Egyiket sem kötelező használni, mindig azért használsz egy konstrukciót, mert valamilyen előnyöd származik belőle, például egyszerűbbé teszi a kódod.
Eleve az hibás koncepció, hogy az adatok és a rajtuk műveleteket végző függvények összetartoznak, mert rugalmatlan lesz a szerkezet.
Az nem rugalmatlanság, ha a fordító nem enged gyököt vonni egy sztringből.
Ez látszik abból, amikor például a névtereket vagy más konstrukciókat objektumorientáltnak nevezel
A névterek nem mások, mint egy prefix, és ebben megegyeznek az OOP implicit első paraméterével (objektum->akármi, this->valami). Egy tőről fakadnak.
Úgy gondolod, hogy az újabb és újabb rendezőelvek csak az objektumorientált programozás sajátjai? Hogy más paradigmák teljesek, tökéletesek, és már nincs hova fejlődjenek?
A kevesebb néha több. A fejlődés nem mindig abból áll, hogy hozzátoldozgatunk valamit a meglévőkhöz.
Az nem rugalmatlanság, ha a fordító nem enged gyököt vonni egy sztringből.
Nem erről van szó, és erre már hoztam példát korábban. Van mondjuk egy asszociatív tömböd, amiből le tudod generálni az oldal menüjét lenyíló almenükkel. A következő feladat, hogy a tartalom tetején lévő breadcrumbot elkészítsd. OOP-ben két választásod lehet:
1, kiegészíted a menü osztályt úgy, hogy tudjon breadcrumbot is készíteni, így megfelelsz a Single Responsibility elvnek
2, készítesz egy másik osztályt, amibe ugyancsak letöltöd a fenti adatokat (vagy egy részüket), és ebből lesz a morzsa
Ha viszont külön kezeled a függvényeket és az adatokat, akkor a fenti dilemmával sosem találkozol.
A névterek nem mások, mint egy prefix, és ebben megegyeznek az OOP implicit első paraméterével (objektum->akármi, this->valami). Egy tőről fakadnak.
Semmi közük egymáshoz. Az objektum->akármi az ugyanaz, mint az akármi(objektum) polimorf függvényhívás, egy futásidejű konstrukció. A névterek, ahogy mondod, egyszerű prefixek, csak fordítási időben léteznek.
A példádban a választási lehetőségek pedig önkényesek, az adott eszközökkel úgy szervezed a kódot, ahogy te akarod. És egész biztos, hogy a breadcrumb generálásnak nem a szájt szerkezetét tároló osztályban a helye.
Teljesen lényegtelen, hogy mi a névterek és az OO "fizikai" megvalósítása, futás- vagy fordítási időben helyettesítünk be bármit. Mi az OOP egyik definíciója (nem jut eszembe jobb szó)? Adatok és rajtuk műveleteket végző függvények. Mi a névterek definíciója? "In general, a namespace is a container for a set of identifiers (also known as symbols, names)" A névtérben lehetnek változók (szimbólumok) és függvények. Ezért írtam, hogy egy tőről fakadnak, és nem is látom különösebb értelmét emiatt egymás mellett használni őket.
És egész biztos, hogy a breadcrumb generálásnak nem a szájt szerkezetét tároló osztályban a helye.
Na, emiatt írtam, hogy rugalmatlan az OOP, mert megszabja, hogy mit hogyan kell csinálni.
Sokkal flexibilisebb feladatban gondolkodni. Van egy feladat (generáljuk le a menü és a breadcrumb HTML kódját), vannak adataink (az asszociatív tömb) és vannak függvényeink. A program célja, hogy végrehajtsa a feladatokat az adatokon a meglévő függvényekkel.
Ha egy függvény csak egy adatcsoporton használható, de mégis szükség van rá másik osztályban, akkor mindenféle trükkökre, átszervezésre vagy kódmásolásra van szükség. Így az OOP nem épp a legjobb eszköz a kódújrahasznosítás jegyében.
Teljesen lényegtelen, hogy mi a névterek és az OO "fizikai" megvalósítása, futás- vagy fordítási időben helyettesítünk be bármit.
De nem az! A névterek csak azért vannak, hogy ne kelljen kilométerhosszú nevekkel dolgozni. A futó programban nem léteznek. Az objektumok adatstruktúrák, a metódusok paraméterei.
Mi az OOP egyik definíciója (nem jut eszembe jobb szó)? Adatok és rajtuk műveleteket végző függvények.
Ez minden program definíciója.
Na, emiatt írtam, hogy rugalmatlan az OOP, mert megszabja, hogy mit hogyan kell csinálni.
Nem szabja meg, te döntöd el, hogy hogyan szervezed a kódot. Ettől még procedurális kódban is vannak egyértelműen rossz megoldások (egy függvény két teljesen különböző feladattal).
Ha egy függvény csak egy adatcsoporton használható, de mégis szükség van rá másik osztályban, akkor mindenféle trükkökre, átszervezésre vagy kódmásolásra van szükség.
Ha egy függvény bizonyos típusú adatokat fogad, akkor tényleg át kell szervezni a kódot, ha más adatokat is kell fogadjon. De ez megintcsak nem az OOP sajátja.
Köszi, hogy eldöntöd helyettem, hogy mit bírjak ki és mit ne, meg mit nem muszáj elolvasnom, mit unjak és mit ne :D Az "OOP halála" szerintem unalmas, mivel teljesen értelmetlen...nem maga a gondolat, mert bármin el lehet filozofálni, én például nagyszerűen tudok a tehenek és vérnyulak repülési szokásairól gondolkodni - hanem a gyakorlatban értelmetlen. Akit annyira zavar az OOP, nyugodtan fejleszthet procedurálisan, vagy kitalálhat új dolgokat ha tud, ha meg péládul vezető pozícióban van, akkor akár éles projekteket is csinálhat OOP nélkül...Az ég világon semmi nem akadályozza meg ebben, ha te nem szereted az OOP-t, akkor ne használd, senki nem kényszerít rá, kivéve ha nem vagy vezető és megmondják mit kell használnod. De ezek a próféciák az OOP haláláról...viccesek, soha nem értettem meg azokat az önjelölt megmondóembereket, akik mindenáron meg akarják másoknak mondani, hogy mi a tuti. Node, hagyjuk is ezt, nem érdemel ez a téma ennyi betűt :) Én amúgy szeretem az OOP-t és a nem OOP-t is, a Linuxot és a Windowsot is és tartózkdok minden ilyen felesleges hitvitától, mert uncsi... bocs, de elnézést kérek előre tőled, hogy unom :D és igaz ami igaz: ha unom, akkor nem kellett volna leírnom, ha nem akartam volna kritikát! Ez igaz, elismerem!
Köszi, hogy eldöntöd helyettem, hogyan fejleszthetek nyugodtan, ha zavar az OOP : ) Aki annyira szereti az OOP-t, nyugodtan dolgozhat vele, de ne vegye már zokon, ha kritizálják vagy temetik ezt a paradigmát, hisz semmi sem állandó, csak a változás. Százötven éve a vasútnak sem volt nagyon alternatívája, aztán nézd meg, mára hova jutott. Én is unom a node.js blogmarkokat, no, és akkor mi van? Másokat meg érdekel. Nem vagyunk egyformák és szólásszabadság van.
És ettől kezdve a minden relatív kategóriába csúsztunk. Ami nem dízel manapság, az többnyire sok áramot igényel. Áram előállítása nem szennyez? (csak azt próbáltam jelezni, hogy ennyire nem egyszerű a dolog, de ne offoljuk szét a témát ;) )
Ez csak azon múlik, hogyan állítod elő, de ennek semmi köze ahhoz, hogy az áram felhasználása nem szennyez. Nagyon káros ez a fajta gondolkodás az élet minden területén (főleg amikor megjelenik a törvényhozásban).
Azért a "nem szennyez" erős túlzás.
És igenis fontos az előállítás is.
Mi lenne, ha egy dízel áramfejlesztő termelné az áramot a vonathoz, pl Kínában? :)
Ha belevesszük, hogy mennyi a járulékos költség (öntözéshez használt dízelolaj, műtrágyák, műtrágyák előállítása, késztermékek szállítása), kiderül, hogy a dinamó tekerése eléggé környezetterhelő.
Most ugyanazt a logikát alkalmazod, mint az előbb. Abból, hogy az élelmiszer előállítása gazdaságossági erők miatt ma sokszor környezetterhelő, nem következik, hogy törvényszerűen az.
Az öntözéshez nem kötelező dízelt használni, trágyázni nem kötelező műtrágyával, és az előállítás sem kötelezően környezetterhelő. A környezetterhelés egy externália, amit megfelelő törvényi szabályozással fel lehet számolni.
A vízfogyasztás egyébként a legdühítőbb hülyeség, amit a haragoszöld környezetvédők kiabálnak. Mintha azzal, hogy öntözöl, kevesebb víz maradna a bolygón.
Ez egy kicsit összetettebb annál, mint ahogy elsőre látszik.
1, Hétmilliárdan vagyunk, és folyamatosan szaporodunk. Ha ebben a pillanatban minden országban bevezetnék az egykepolitikát, még akkor is évekig vagy évtizedekig nőne a népesség száma a tehetetlenség miatt.
2, A növekvő népességet egyre több élelemmel kell ellátni. A művelhető földterület mérete maximált, sőt mindjárt látod, hogy csökken. Ebből kell kihozni a legjobbat, amit a termésátlagok növelésével, műtrágyázással lehet elérni, aminek az ára az, hogy egyre jobban kiszipolyozzuk a talajt, a talajvizet szennyezzük, s ezt utána tisztítani kell. A víztisztítás energiába kerül.
3, Az erdők kivágásával lehet növelni a termőterületet, de ez egyrészt maximált, másrészt az erdők rendkívül fontosak a vízgazdálkodás szempontjából. A fák képesek jól megkötni a talajt, a haszonnövények nem, ez utóbbiak esetében folyamatos a föld belemosódása a talajvízbe (a vikingek többek között emiatt haltak ki Grönlandról, de ugyanez megy jelenleg Ausztráliában az ősbozót feltörésével és helyükre legelők telepítésével, de az emberiség egyik bölcsőjének mondott Termékeny Félhold, a Tigris és Eufrátesz köze is ma már sivatag). Emellett a fák hidegen tartják a vizet, ahol kivágják a fákat, a kisebb folyóvizek felmelegednek és elpárolognak.
4, A globális felmelegedés miatt egyre kiszámíthatatlanabb az időjárás, az özönvízszerű esőzések a 3-as pontban említett földpusztulást erősítik.
5, Amelyik csapadék a tengerekbe/óceánokba hullik, az elveszett, mert rendkívül drága lepárolni.
Az állításaid, bár igazak, de legfeljebb az ősközösségben működhetnek. Túl sokan vagyunk ehhez, természetes módszerekkel nem lehetne a szükséges termésátlagot elérni. Az éhező pedig kinyírja a legokosabb programozót is, ha túl szeretne élni.
A fenti okozati lánc logikusnak tűnik, de az alapfelvetésed nincs rendben, a konklúziód pedig… nos hát…
Hétmilliárdan vagyunk, és folyamatosan szaporodunk.
A harmadik világ népei szaporodnak, a fejlett társadalmak születésszáma egyre hanyatlik.
Itt akár le is zárhatnánk a növekvő élelemszükségletre felépített érvelésed vizsgálatát, de ne menjünk el amellett sem, hogy a művelésre alkalmas földterületnek töredékét hasznosítjuk csak művelésre, hogy technológiailag vagyunk hozzá elég fejlettek, hogy művelésre alkalmassá tegyünk meglévő területeket vagy akár létrehozzunk újakat, és hogy az élelmezésnek nem a földművelés az egyetlen lehetséges forrása.
Amelyik csapadék a tengerekbe/óceánokba hullik, az elveszett, mert rendkívül drága lepárolni.
Még szerencse, hogy a Földnek erről senki nem szólt, és a vízkör működik pár milliárd éve :)
Érdekes ahogy vitatkoztok, egy fontos dolgot viszont mindketten figyelmen kívül hagytatok.
A terhelés mértéke kizárólag az egyes embereken múlik. Mert gyakorlatilag semmiből sincs felesleg, ha valamit nem veszünk meg, azt nem gyártják.
Innen nézve csak nekünk, fogyasztóknak van hatásunk a problémára. Nekünk kell környezet tudatosan élni.
Teljesen mindegy, hogy hanyadik világ népei szaporodnak, ha az összlétszám nő, akkor több élelemre is van szükség. Mint írtam, nem lehet minden földterületet élelemforrásként használni, mert a haszonnövények mellett a vízkészlet csökken, erdők szükségesek a jó vízgazdálkodáshoz.
A földművelésen kívül fehérjeforrásunk a halgazdálkodás, pontosabban annak a hiánya. Itt egyrészt nincs olyan tapasztalata az emberiségnek, mint a háziállatokkal, azaz jelentősen kisebb hatékonysággal és nagyobb környezetterheléssel tudunk halakat fenntartható módon tenyészteni. Másrészt évtizedes probléma, hogy a világtengereket túlhalásszák, és eljutottunk egy olyan szintre, hogy óriási területen nem képes a halpopuláció megújulni, szinten maradni.
»Amelyik csapadék a tengerekbe/óceánokba hullik, az elveszett, mert rendkívül drága lepárolni.«
Még szerencse, hogy a Földnek erről senki nem szólt, és a vízkör működik pár milliárd éve :)
A globális felmelegedéssel nőt a viharok, heves esőzések száma. Ezt a vizet nehezebb megtartani, mert hirtelen jön és nagy mennyiségű. Mint fentebb írtam, a talaj tengerbe való mosása is felgyorsult, és emellett a mezőgazdasági területek növekedésével a folyók vízgyűjtő területe is csökkent. Így csak közvetve, de igaz, amit írtam.
Ajánlott olvasmány Jared Diamondtól az Összeomlás.
Elolvastad a cikket? Egy rossz szót nem szól az oop eszközeiről (talán csak annyit, hogy nem tökéletesek, ami történetesen igaz), arról szól, hogy a funkcionális(abb) megközelítés gyakran jóval karbantarthatóbb szoftvert eredményez.
Én sem értem, hogy miért csak erről akarnak beszélni az emberek, elég unalmas már, de hát nyilván erre van igényük, hisz tele a webfejlesztés világa izgalmasabbnál izgalmasabb újdonságokkal, ezekről mégsem beszél senki.
Azért ez egy nagyon súlyos kérdés, és erre neked nap mint nap van rálátásod, amikor élesíted ki az álláshirdetéseket. A "programozót keresünk"-ben általában elvárás az OOP szemlélet; namost, ha senki sem tudja pontosan, hogy mi az OOP, akkor mit várnak el tulajdonképp a munkaadók? Mit tudnak nyújtani a munkavállalók? Ez olyan, mintha nem beszélnének egy nyelvet.
Mégis úgy tűnik, hogy működik. Értelmezd úgy, hogy ismerd azokat az eszközöket, amikről beszélni szoktunk.
De itt csak annyit akartam jelezni, hogy a Weblaboron az lesz téma, amit a közösség témává tesz. Értetlenül állok az előtt, hogy megjelenhet egy HTML5, véglegesedhet egy HTTP/2, érkezhet egy Swift úgy, hogy senki sincs, aki hírt küldjön és beszélgetést kezdeményezzen róla.
Ellenben rendszeresen éri a Weblabort kritika azért, mert egy tag folyton ugyanazon pörög, egy csomó másik meg beszáll együtt pörögni.
A kérdést már én is feltettem korábban, hogy mi akadályoz meg bárkit abban, hogy beküldjön egy blogmarkot? Még bookmarklet is van hozzá.
És a másik problémakör: oké, hogy én mindig mondom a hülyeségeimet, de tényleg ott van az ellentábor, aki meg a magáét. Most akkor ki a jobb/különb? Kinek van igaza? Van igazság? Mindenben tévednék? Mindenben tévedne az ellentábor?
De itt csak annyit akartam jelezni, hogy a Weblaboron az lesz téma, amit a közösség témává tesz.
Ellenben rendszeresen éri a Weblabort kritika azért, mert egy tag folyton ugyanazon pörög, egy csomó másik meg beszáll együtt pörögni.
Mint rendszeres kritizáló, megszólítottnak érzem magam. Hadd osszam meg a megfigyeléseimet (némileg kívülről, mint marginális és sokáig readonly fórumtag). Kiindulási pontom az lesz, hogy volt idő, amikor a Weblabor virágzott (naprakész témák, számos hozzáértő - számomra többen szakmai példaképek), illetve jelenleg nem virágzik. Ha ezt elfogadjuk, akkor nyilván valami történt útközben. Az emberek már nincsenek itt vagy nem tartják indokoltnak, hogy szóljanak. Akik itt vannak, azok se kezdeményeznek társalgást friss témákban. Miért vajon?
Továbbra sem akarnám egy tag nyakába varrni az egészet. Úgy vélem, az a közösség legalább annyira hibás, amely nem képes korrigálni tagjainak hibás viselkedését, amely nem képes megvédeni magát saját tagjainak egójától. Hülyén hangozhat, de ez minden emberi közösségben elengedhetetlen és nem arról szól, hogy ki kell vágni egyébként használható tudással rendelkező, értelmes tagokat, hanem segíteni kell nekik, hogy a közösségért (ezáltal önmagukért is) és ne saját vélt céljaikért, (szándékukon kívül) a közösség ellen dolgozzanak.
Furán hangozhat az is, hogy komolyan gondolom, egyetlen ember ekkora hatással bírhat. A kulcsszó a rendszeresség. Tegyük fel, valaki elég kitartó, és majd minden topikban képes saját képzelt kereszteshadjáratát folytatni huzamosabb ideig. Minden érdekes beszélgetést ugyanazzá a parttalan flamewarrá alakít, hisz az ilyesmire nyilván sokan ugranak, változó okokból. Van aki tényleg ezen a szinten van, van aki csak tanítani akarja a plebset, s önmagát is besározza, miközben a dagonyából igyekszik kirángatni őket. A közösség (beleértve a moderátorokat) pedig számomra ismeretlen okokból, gondolom félreértelmezett liberalizmusból ezt hagyja. Ennek (értelemszerűen) lesznek maradandó hatásai. Az ember ugyanis felhasználja a tapasztalatait döntéseihez.
A Weblaboron azt tapasztalja az egyszeri olvasó, hogy bizonyos témák egyfajta tiltólistán vannak. Mostanra a lista igen bőséges (HTML5, AJAX, OOP, Node.js, stb.) és lefedi a modern webes eszköztár egy jelentős részét. Évek tapasztalatai támasztják alá, hogy aki ezen (igen tág) témakörökbe sorolható, vagy valamilyen módon ezekkel kapcsolatba hozható kérdésben megnyilvánul itt, az offtopik ranteket triggerel, a számtalanszor lefutott köröket váltja ki újra és újra. Ha szeretnél a Single Responsibility Principle-ről, a Decorator mintáról vagy akár a Haskellről eszmét cserélni, 2-3 hozzászóláson belül már kezdődik is a "Miért rossz az OOP" (hogy jön a Haskellhez az OOP? bár tudnám). Ahogy az idő telik, szép lassan mindenki megtanulja: inkább maradj csöndben, hagyd a francba, menj máshová. Így válik a Weblabor azon hellyé, ahol "úgyis csak lefikáznak minden új és érdekes dolgot" (idézet nem tőlem), egyetlen ember hozzáállása pedig a Weblabor közösségének hozzáállásává.
És akkor itt vagyunk, most, s a főmoderátor nem érti (bár gondolom érti), az emberek miért nem beszélnek a modern web vívmányairól egy ilyen izgalmas és fontos korszakban. Legalábbis itt miért nem. Az a baj, hogy a bizalmat elveszíteni könnyű, visszaállítani eredeti formájára szinte lehetetlen.
Gábort egyébként kedvelem, nem akarom "bántani", ehhez amúgy is már rég késő. Megelőzni már nincs mit. Kérdés, hogyan lehet újra kialakítani a reflexet a célközönségben: ha olvasol valami érdekesről a modern webbel kapcsolatban, merüljön fel benned, hogy a Weblaboron osztod meg vagy kezdeményezel beszélgetést róla.
Valahogy azért lezajlanak az interjúk, és értjük egymást. Akkor is, ha nem ugyanaz az anyanyelvünk. Az OOP nem egy egzakt valami. Mint ahogy a programozás sem. Mégis elvárás a programozó jelöltektől, hogy tudjanak programozni... Pár kérdéssel jól mérhető, hogy a jelölt érti-e a motivációját, és tudja-e alkalmazni a mögöttes szemléletet, elméletet.
Looking at the big picture, I
I think this is why "OOP" survived this long. Without a definite definition everyone can agree on, its meaning keeps mutating beyond recognition as we change our programming practices.
Fentieket magam is rendszeresen megfogalmazom az OOP körül folyó viták kapcsán. Ebből is következik, hogy az OOP sosem fog meghalni, talán csak végre felismerjük, hogy sosem létezett.
A cím természetesen
És ez mitől nyilvánvaló?
Mert külön-külön mindegyik
Együtt valamiért mégsem a
És honnan tudjuk, hogy
Ha a panic-ra gondolsz, akkor
Az, hogy kinek van igaza, az idő dönti el. A nyelvekben a fenti eszközök jóideje léteztek, a Gót tudatos tervezés előzte meg, és így döntöttek a kihagyásukról.
A kivételeket te is
Elsősorban nem azért, nekem a statikus analízis hiánya a bajom, de ennek elvi akadálya nincs.
És mielőtt jóideje léteztek, az előtt nem léteztek, így egyelőre az idő már döntött is. Persze ez nem azt jelenti, hogy később nem változhat a felfogásunk, aztán egy idő után újra, csak egy-egy nyelv választásaival nem nagyon lehet bármit is alátámasztani.
És mielőtt jóideje léteztek,
Ezek az emberek pontosan tudják, hogy mit miért tesznek, amikor programozási nyelvről van szó.
Ezt az érvelést nem
Te sem gondolhatod komolyan, hogy véletlenül születtek meg ezek az eszközök.
Ezek a nyelvek mind a Bell Labs egykori csapatának igényei szerint, egy bizonyos felhasználási területhez készültek. Nem is nagyon alkalmasak bizonyos komplexitás fölött karbantartható kód írására.
Te sem gondolhatod komolyan,
Viszont tudatos tervezési
És tudatos döntés az is, amikor egy új nyelv meg beemeli őket.
A Go pont ugyanúgy egy minimalista nyelv, ahogy a C is az volt a maga idejében.
Ez önmagában nem jelent sokat.
Ezek a nyelvek mind a Bell
Vörös posztó
Miért?
Mert az egész koncepció
Elolvastad az írást? Épp
És engem hányszor kívántak
Az írás arról szól, hogy az
Hogyan lehet egy módszertan
Az OOP egy rosszul definiált fogalom, melynek alkotóelemei instabilak (lásd öröklődés) és kontraproduktívak (lásd adatok és hozzájuk kötött függvények). Ha valaki számára ez nem elég intő jel, akkor az végtelenül optimista vagy túlságosan konzervatív.
Hogyan lehet egy módszertan
A procedurális programozás sem egy egzakt fogalom. Az eljárás már inkább. Meg a polimorfizmus. Az eljárások jók. A polimorfizmus is.
Az öröklődés egy implementációs eszköz és nincs vele semmi baj, ha nem mindent azzal akarsz megoldani.
Ezt még sehogy nem támasztottad alá.
OK, döglődik, halott. Mi van
Mi van helyette?
Azt ne mondjátok, hogy a funkcionális, mert amiben a változó valójában konstans... az nem lesz túl népszerű. :)
Vissza a gyökerekhez, újra elővesszük a procedurális dolgokat?
Vagy merre tovább?
(bocs, nem tudtam végigolvasni az egészet, de átfutva rajta nem láttam, hogy ajánl-e valamit OOP helyett)
Procedurális
A funkcionális programozásban átestek a ló másik oldalára, amikor egyáltalán nem bíznak a programozóban, és nem engednek meg állapotot tárolni. Ez első és második hallásra is elég vad dolog.
Procedurális programozásban arra kell ügyelni, hogy a függvényeink lehetőleg ne használjanak globális változókat, azaz ugyanolyan paraméterekkel meghívva mindig ugyanazt az eredményt adják vissza.
Szerintem soha nem az eszköz
Részben igaz
Így a legjobb programozónak is egyre nehezebb dolga van, ha jó OOP programot szeretne megírni. Szerintem sokkal kifizetődőbb a lehető legegyszerűbb szoftver megírására törekedni, és a lehető legkevesebb és legegyszerűbb eszközt használni.
Először vala az öröklődés,
Ezek közül egyedül a polimorfizmus az, ami nem létezett korábban.
A tervezési minták nem az objektumorientált programozás sajátjai.
Mert más programozási paradigmák esetén nem kell alkalmazzál bizonyos elveket, hogy jó programot írj?
Más programozási paradigmával írt programokat nem kell tesztelni? Amit a polimorfizmus hihetetlenül megkönnyít.
A programozónak bármilyen paradigma mellett egyre nehezebb dolga van, ha jó programot akar írni, mivel egyre magasabbak az elvárásaink.
Bárcsak egyszer elolvasná az
Mostanában nem először van
Az újabb és újabb elveket nagyon meg kell szűrni, mert nem feltétlenül lesz tőlük egyszerűbb a program, lásd függőségkezelés. A legcélszerűbb egyszerűségre törekedni, mert egyszerű programban lehet a legkevesebbet hibázni.
Mostanában nem először van
Nincs ilyen szándékom, de nem is látom, hogy hol tennék ilyet.
Az öröklődés tisztán procedurális nyelvekben is létezik, egyszer majd utánajárok, hol jelent meg először. A zártság alatt nem tudom, mit értesz, ez is egy aluldefiniált fogalom.
Az, hogy a négyek írtak egy könyvet pár példával és adtak egy jól hangzó nevet a dolognak, és tették mindezt OOP környezetben, teljesen irreleváns. Ha nem létezne OOP, előbb-utóbbi valaki akkor is írt volna a kódszervezésben viszatérő mintákról.
Igen, és ezt a szűrést folyamatosan végzi a szakma, például ilyen vitákon keresztül, mint ez. És ennek ellenére ezek az elvek élnek és alkalmazzák őket. Valószínűleg azért, mert beváltak.
Öröklődés procedurális
struct a { int
Hát ezt elég nagy
Miért? Tudja azt, amit az
a
memóriaképét örökli. Ráadásul még polimorizmust is tud, nevezetesen ha akaroma
-nak látszik, ha akaromb
-nek.Hogy látszik "a"-nak a
Ilyen alapon már az "a" definíciója is öröklődést tartalmaz, hiszen ott van benne egy int típusú változó...
#include <stdio.h> struct A
Ha B örökölne A-tól, akkor a
Az, hogy az öröklődés nyelvi
Vigyázz, én nem ezt írtam,
struct a
adattag nevét a kódrészletben.Szabványos C-ben valóban így lehetséges.
Ha explicit kasztolod az argumentumot, akkor nem fog.
Ha B örökölne A-tól, akkor a
Működik. Ez egy viszonylag elterjedt kiegészítés a fordítókban. A C11 pedig már ha jól tudom, kanonizálta is.
Ha ez így, ebben a formában
update: linuxon, az ubuntu 14.04-ben lévő gcc-vel nem is fordul le úgy, ahogy mondod. Amíg csak a deklaráció van, addig elfogadja, bár dob rá egy warningot, miszerint
warning: declaration does not declare anything [enabled by default]
Ha viszont hivatkozni próbálok a b-be ágyazott a foo tagjára, arra már error jön. Persze rég nem játszottam C-vel, lehet, hogy én rontom el.
Próbáld a -std=c11 vagy
-std=c11
vagy-fms-extensions
flaggel.»A négyek bandája ezt
A tervezési minták nem az objektumorientált programozás sajátjai.
Patterns by Type
Ha elolvasod a linkelt bekezdést, világossá válik, hogy azokat objektumokra és osztályokra képzelték el és ajánlják alkalmazásra a négyek. Ha procedurálisan vagy funkcionálisan dolgozunk, ezek nagy részének vagy egészének semmi értelme nincsen.
Az OOP tervezési minták egyébként valóban szükségesek, ha valaki objektumorientáltan programozik, mert nélkülük kezelhetetlenné válik a szoftver.
Software design patterns. És
Ezt most nem értem, ugyanezt
Tekintsd úgy, hogy
Tegyünk itt pontot erre a szálra légy szíves.
A funkcionális programozásban
Nem a ló túloldalára estek át, ez a funkcionális programozás matematikai gyökerei miatt adott. A gyakorlatban az állapotváltozások minimalizálása és lokalizálása a cél.
Az állapot lokalizálása adatstruktúrákba az objektumorientált programozás alapja, szemben a klasszikus procedurális megközelítéssel, ahol az alkalmazás globális változóit módosítják az eljárások. Just sayin’.
Az állapot lokalizálása
Nem értem a dolgot a
Minden évben megjelenik
Egyrészt évente
OOP még mindig jobb, mint a
Ez nem igaz, lásd 12-es
Kicsit kifejtem, hogy érthető legyen: procedurális programozásban alapesetben az egyetlen szervező erő a függvény vagy az eljárás. Ez a későbbiekben kiegészül a függőségkezeléssel (globális változók).
OOP-ben bejönnek az OOP alapjai (öröklődés, polimorfizmus, zártság), a programtervezési minták, a névterek, a SOLID és a függőségkezelés.
No offense, de egyre inkább
Amiket felsoroltál, azok akkor növelik a káoszt, ha hozzá nem értő (a művészet más kategória!) kezekbe kerül az eszköz.
Szerintem.
Lehet
Én nem azt állítom, hogy az OOP egyes részegységei per se rosszak lennének, de egyben az egész már túlságosan elbonyolítja a szoftvert.
Eleve az hibás koncepció, hogy az adatok és a rajtuk műveleteket végző függvények összetartoznak, mert rugalmatlan lesz a szerkezet. Sok OOP-s küzd a coupling ellen, pedig eleve úgy kezdenek, hogy összerendelik ezt a két független halmazt.
Nem zárom ki, hogy igazad
Szerintem nincs elég széles látóköröd, mert kevés nyelvet ismersz, illetve nem nagyon ismered a programozási nyelvek történetét. Ez látszik abból, amikor például a névtereket vagy más konstrukciókat objektumorientáltnak nevezel.
Úgy gondolod, hogy az újabb és újabb rendezőelvek csak az objektumorientált programozás sajátjai? Hogy más paradigmák teljesek, tökéletesek, és már nincs hova fejlődjenek?
Egyiket sem kötelező használni, mindig azért használsz egy konstrukciót, mert valamilyen előnyöd származik belőle, például egyszerűbbé teszi a kódod.
Az nem rugalmatlanság, ha a fordító nem enged gyököt vonni egy sztringből.
Ez látszik abból, amikor
1, kiegészíted a menü osztályt úgy, hogy tudjon breadcrumbot is készíteni, így megfelelsz a Single Responsibility elvnek
2, készítesz egy másik osztályt, amibe ugyancsak letöltöd a fenti adatokat (vagy egy részüket), és ebből lesz a morzsa
Ha viszont külön kezeled a függvényeket és az adatokat, akkor a fenti dilemmával sosem találkozol.
A névterek nem mások, mint
Semmi közük egymáshoz. Az objektum->akármi az ugyanaz, mint az akármi(objektum) polimorf függvényhívás, egy futásidejű konstrukció. A névterek, ahogy mondod, egyszerű prefixek, csak fordítási időben léteznek.
A példádban a választási lehetőségek pedig önkényesek, az adott eszközökkel úgy szervezed a kódot, ahogy te akarod. És egész biztos, hogy a breadcrumb generálásnak nem a szájt szerkezetét tároló osztályban a helye.
Teljesen lényegtelen, hogy mi
Sokkal flexibilisebb feladatban gondolkodni. Van egy feladat (generáljuk le a menü és a breadcrumb HTML kódját), vannak adataink (az asszociatív tömb) és vannak függvényeink. A program célja, hogy végrehajtsa a feladatokat az adatokon a meglévő függvényekkel.
Ha egy függvény csak egy adatcsoporton használható, de mégis szükség van rá másik osztályban, akkor mindenféle trükkökre, átszervezésre vagy kódmásolásra van szükség. Így az OOP nem épp a legjobb eszköz a kódújrahasznosítás jegyében.
Teljesen lényegtelen, hogy mi
De nem az! A névterek csak azért vannak, hogy ne kelljen kilométerhosszú nevekkel dolgozni. A futó programban nem léteznek. Az objektumok adatstruktúrák, a metódusok paraméterei.
Ez minden program definíciója.
Nem szabja meg, te döntöd el, hogy hogyan szervezed a kódot. Ettől még procedurális kódban is vannak egyértelműen rossz megoldások (egy függvény két teljesen különböző feladattal).
Ha egy függvény bizonyos típusú adatokat fogad, akkor tényleg át kell szervezni a kódot, ha más adatokat is kell fogadjon. De ez megintcsak nem az OOP sajátja.
Névterek
a névterek Mi köze a
Mi köze a névtereknek az objektumorientáltsághoz? (Az égvilágon semmi.)
Köszi, hogy eldöntöd
Köszi, hogy eldöntöd
vasút... lásd Déli
Százötven éve a vasútnak sem
430 km/h-val halad és teljesen környezetbarát? :)
Környezetbarát? Melyik? ;)
Bármelyik, amelyik nem éget
És ettől kezdve a minden
Áram előállítása nem
Ez csak azon múlik, hogyan állítod elő, de ennek semmi köze ahhoz, hogy az áram felhasználása nem szennyez. Nagyon káros ez a fajta gondolkodás az élet minden területén (főleg amikor megjelenik a törvényhozásban).
Politikába nem mennék bele,
Nem 0
És igenis fontos az előállítás is.
Mi lenne, ha egy dízel áramfejlesztő termelné az áramot a vonathoz, pl Kínában? :)
Rosszabb
És igenis fontos az
Persze, hogy fontos, de ettől még a fogyasztás nem szennyez. Lehetséges a környezetbarát előállítás, a szabályzón múlik, hogy megköveteli-e.
Jelenleg nem igazán
Ha felülsz a biciklire és
Az állításod igaz lenne, ha
Mennyi a víz egy nagy adag steakben?
Ha belevesszük, hogy mennyi a járulékos költség (öntözéshez használt dízelolaj, műtrágyák, műtrágyák előállítása, késztermékek szállítása), kiderül, hogy a dinamó tekerése eléggé környezetterhelő.
Most ugyanazt a logikát
Az öntözéshez nem kötelező dízelt használni, trágyázni nem kötelező műtrágyával, és az előállítás sem kötelezően környezetterhelő. A környezetterhelés egy externália, amit megfelelő törvényi szabályozással fel lehet számolni.
A vízfogyasztás egyébként a legdühítőbb hülyeség, amit a haragoszöld környezetvédők kiabálnak. Mintha azzal, hogy öntözöl, kevesebb víz maradna a bolygón.
Ez egy kicsit összetettebb
1, Hétmilliárdan vagyunk, és folyamatosan szaporodunk. Ha ebben a pillanatban minden országban bevezetnék az egykepolitikát, még akkor is évekig vagy évtizedekig nőne a népesség száma a tehetetlenség miatt.
2, A növekvő népességet egyre több élelemmel kell ellátni. A művelhető földterület mérete maximált, sőt mindjárt látod, hogy csökken. Ebből kell kihozni a legjobbat, amit a termésátlagok növelésével, műtrágyázással lehet elérni, aminek az ára az, hogy egyre jobban kiszipolyozzuk a talajt, a talajvizet szennyezzük, s ezt utána tisztítani kell. A víztisztítás energiába kerül.
3, Az erdők kivágásával lehet növelni a termőterületet, de ez egyrészt maximált, másrészt az erdők rendkívül fontosak a vízgazdálkodás szempontjából. A fák képesek jól megkötni a talajt, a haszonnövények nem, ez utóbbiak esetében folyamatos a föld belemosódása a talajvízbe (a vikingek többek között emiatt haltak ki Grönlandról, de ugyanez megy jelenleg Ausztráliában az ősbozót feltörésével és helyükre legelők telepítésével, de az emberiség egyik bölcsőjének mondott Termékeny Félhold, a Tigris és Eufrátesz köze is ma már sivatag). Emellett a fák hidegen tartják a vizet, ahol kivágják a fákat, a kisebb folyóvizek felmelegednek és elpárolognak.
4, A globális felmelegedés miatt egyre kiszámíthatatlanabb az időjárás, az özönvízszerű esőzések a 3-as pontban említett földpusztulást erősítik.
5, Amelyik csapadék a tengerekbe/óceánokba hullik, az elveszett, mert rendkívül drága lepárolni.
Az állításaid, bár igazak, de legfeljebb az ősközösségben működhetnek. Túl sokan vagyunk ehhez, természetes módszerekkel nem lehetne a szükséges termésátlagot elérni. Az éhező pedig kinyírja a legokosabb programozót is, ha túl szeretne élni.
A fenti okozati lánc
A harmadik világ népei szaporodnak, a fejlett társadalmak születésszáma egyre hanyatlik.
Itt akár le is zárhatnánk a növekvő élelemszükségletre felépített érvelésed vizsgálatát, de ne menjünk el amellett sem, hogy a művelésre alkalmas földterületnek töredékét hasznosítjuk csak művelésre, hogy technológiailag vagyunk hozzá elég fejlettek, hogy művelésre alkalmassá tegyünk meglévő területeket vagy akár létrehozzunk újakat, és hogy az élelmezésnek nem a földművelés az egyetlen lehetséges forrása.
Még szerencse, hogy a Földnek erről senki nem szólt, és a vízkör működik pár milliárd éve :)
környezet terhelés
A terhelés mértéke kizárólag az egyes embereken múlik. Mert gyakorlatilag semmiből sincs felesleg, ha valamit nem veszünk meg, azt nem gyártják.
Innen nézve csak nekünk, fogyasztóknak van hatásunk a problémára. Nekünk kell környezet tudatosan élni.
Teljesen mindegy, hogy
Ami a fenti felsorolásból kimaradt, az a szikesedés, ami ugyancsak a felhasználható termőterület méretét csökkenti, és jelentősen hozzájárul az emberiség.
A földművelésen kívül fehérjeforrásunk a halgazdálkodás, pontosabban annak a hiánya. Itt egyrészt nincs olyan tapasztalata az emberiségnek, mint a háziállatokkal, azaz jelentősen kisebb hatékonysággal és nagyobb környezetterheléssel tudunk halakat fenntartható módon tenyészteni. Másrészt évtizedes probléma, hogy a világtengereket túlhalásszák, és eljutottunk egy olyan szintre, hogy óriási területen nem képes a halpopuláció megújulni, szinten maradni.
Még szerencse, hogy a Földnek erről senki nem szólt, és a vízkör működik pár milliárd éve :)
Ajánlott olvasmány Jared Diamondtól az Összeomlás.
Szerintem ez másról szól.
Weblabor
Elolvastad a cikket? Egy
Nem csak a cikk
Én sem értem, hogy miért csak
Azért ez egy nagyon súlyos
Mégis úgy tűnik, hogy
De itt csak annyit akartam jelezni, hogy a Weblaboron az lesz téma, amit a közösség témává tesz. Értetlenül állok az előtt, hogy megjelenhet egy HTML5, véglegesedhet egy HTTP/2, érkezhet egy Swift úgy, hogy senki sincs, aki hírt küldjön és beszélgetést kezdeményezzen róla.
Ellenben rendszeresen éri a Weblabort kritika azért, mert egy tag folyton ugyanazon pörög, egy csomó másik meg beszáll együtt pörögni.
Furcsa, na.
A kérdést már én is feltettem
És a másik problémakör: oké, hogy én mindig mondom a hülyeségeimet, de tényleg ott van az ellentábor, aki meg a magáét. Most akkor ki a jobb/különb? Kinek van igaza? Van igazság? Mindenben tévednék? Mindenben tévedne az ellentábor?
TLDR: Nem furcsa, na.
Mint rendszeres kritizáló, megszólítottnak érzem magam. Hadd osszam meg a megfigyeléseimet (némileg kívülről, mint marginális és sokáig readonly fórumtag). Kiindulási pontom az lesz, hogy volt idő, amikor a Weblabor virágzott (naprakész témák, számos hozzáértő - számomra többen szakmai példaképek), illetve jelenleg nem virágzik. Ha ezt elfogadjuk, akkor nyilván valami történt útközben. Az emberek már nincsenek itt vagy nem tartják indokoltnak, hogy szóljanak. Akik itt vannak, azok se kezdeményeznek társalgást friss témákban. Miért vajon?
Továbbra sem akarnám egy tag nyakába varrni az egészet. Úgy vélem, az a közösség legalább annyira hibás, amely nem képes korrigálni tagjainak hibás viselkedését, amely nem képes megvédeni magát saját tagjainak egójától. Hülyén hangozhat, de ez minden emberi közösségben elengedhetetlen és nem arról szól, hogy ki kell vágni egyébként használható tudással rendelkező, értelmes tagokat, hanem segíteni kell nekik, hogy a közösségért (ezáltal önmagukért is) és ne saját vélt céljaikért, (szándékukon kívül) a közösség ellen dolgozzanak.
Furán hangozhat az is, hogy komolyan gondolom, egyetlen ember ekkora hatással bírhat. A kulcsszó a rendszeresség. Tegyük fel, valaki elég kitartó, és majd minden topikban képes saját képzelt kereszteshadjáratát folytatni huzamosabb ideig. Minden érdekes beszélgetést ugyanazzá a parttalan flamewarrá alakít, hisz az ilyesmire nyilván sokan ugranak, változó okokból. Van aki tényleg ezen a szinten van, van aki csak tanítani akarja a plebset, s önmagát is besározza, miközben a dagonyából igyekszik kirángatni őket. A közösség (beleértve a moderátorokat) pedig számomra ismeretlen okokból, gondolom félreértelmezett liberalizmusból ezt hagyja. Ennek (értelemszerűen) lesznek maradandó hatásai. Az ember ugyanis felhasználja a tapasztalatait döntéseihez.
A Weblaboron azt tapasztalja az egyszeri olvasó, hogy bizonyos témák egyfajta tiltólistán vannak. Mostanra a lista igen bőséges (HTML5, AJAX, OOP, Node.js, stb.) és lefedi a modern webes eszköztár egy jelentős részét. Évek tapasztalatai támasztják alá, hogy aki ezen (igen tág) témakörökbe sorolható, vagy valamilyen módon ezekkel kapcsolatba hozható kérdésben megnyilvánul itt, az offtopik ranteket triggerel, a számtalanszor lefutott köröket váltja ki újra és újra. Ha szeretnél a Single Responsibility Principle-ről, a Decorator mintáról vagy akár a Haskellről eszmét cserélni, 2-3 hozzászóláson belül már kezdődik is a "Miért rossz az OOP" (hogy jön a Haskellhez az OOP? bár tudnám). Ahogy az idő telik, szép lassan mindenki megtanulja: inkább maradj csöndben, hagyd a francba, menj máshová. Így válik a Weblabor azon hellyé, ahol "úgyis csak lefikáznak minden új és érdekes dolgot" (idézet nem tőlem), egyetlen ember hozzáállása pedig a Weblabor közösségének hozzáállásává.
És akkor itt vagyunk, most, s a főmoderátor nem érti (bár gondolom érti), az emberek miért nem beszélnek a modern web vívmányairól egy ilyen izgalmas és fontos korszakban. Legalábbis itt miért nem. Az a baj, hogy a bizalmat elveszíteni könnyű, visszaállítani eredeti formájára szinte lehetetlen.
Gábort egyébként kedvelem, nem akarom "bántani", ehhez amúgy is már rég késő. Megelőzni már nincs mit. Kérdés, hogyan lehet újra kialakítani a reflexet a célközönségben: ha olvasol valami érdekesről a modern webbel kapcsolatban, merüljön fel benned, hogy a Weblaboron osztod meg vagy kezdeményezel beszélgetést róla.
Valahogy azért lezajlanak az