Vita:Objektumorientált programozás

A Programozás Wiki wikiből

Jó ötlet, hogy több nyelven mutatjuk be, hogy épül fel egy osztály, hogy kell származtatni, de jó lenne akkor már ugyanazt a konkrét példát végigvinni a nyelveken, hogy egyszerű legyen az összehasonlítás. Én az első, egyszerűbb példát javaslom, ami java-ban van megírva, mert így vszeg több nyelven is megcsinálják, mivel hamar megvan. Meg is csinálom a c#-os verziót.

Hmm, most nézem, hogy elég rossz a példa, mert a számok nem külön osztályok, és két jelemzőt is a cd-ben tárolunk. Na ez pont ellentmond az elvnek sztem...

Doi: Jól leszóltad a példámat. Valószínűleg arra az elvre gondolsz, hogy (valamilyen szempontból) különböző egységek ne kerüljenek egy osztályba ... nos a konkrét példa a "minél rövidebb, témát alátámasztó programrész" elvét próbálta követni. Jut eszembe, esetleg gyárthatnánk "A programozás 10 (100? 1000? :)) parancsolata" szócikket is.

Tartalomjegyzék

[szerkesztés]

Nem igazán vagyok jártas,más nyelvekben. Igazából Turbo Pascal Fan vagyok.Ott hasonló képen kell deklarálni az objektum típust,és származtatni is.Persze, az osztály fogalma nekem szürke köd. Azért írtam be a teljes kódot, mert, egy objektum típust deklaráltam, melynek vannak mezői is, és metódusai is.Természetesen ahhoz, hogy működjenek ezek a metódusok,le kellett vezetnem a teljes definíciót.Csak, hogy érthető legyen a forráskód. FlamingClaw vagyok.


Így van, szerintem is ugyanazt a példát kellene végigvinni, ha már valamit, és ráadásul egy olyant, ahol az öröklés előnyei is megmutatkoznak. Pl. Shape bázisosztály (X, Y pozíciókoordinátákkal) és abból Rectangle, Circle származtatottak (Width, Height ill. Radius plusz mezőkkel), vagy valami hasonló. Bár abban sem vagyok teljesen biztos, hogy ezek a példák ide kellenének ebbe a címszóba - az ugyanis a szintaxisra tolja el a hangsúlyt, ami marhára nem a lényege az objektumorientált programozásnak, csak egy szükséges formai eleme. Ezen kívül ha tíz nyelven is bekerül ide a szóban forgó OOP kód, a címszó mérete óriási lesz ahhoz képest, hogy mennyi benne a magyarázó szöveg, ráadásul nehezen is lesz átlátható. Sokkal célszerűbb lenne akkor már külön-külön lapra kirakni ezeket a példákat, és egyszerűen csak egy felsorolásban linkelni őket a címszó végén. Így az teljesen áttekinthető maradna, és nem vonná el a sok forráskód a figyelmet magáról a magyarázó szövegrészről, miközben a példák esetleges terjengős hossza sem okozna problémát, hiszen külön címszóban lennének. Sting 2010. július 10., 23:29 (UTC)

[szerkesztés]

Ez igen jó, hogy egyre több fogalom gyűlik ide, gondolom, lehet, hogy később némelyikből külön szócikk is lesz. Nem tudunk a statikus metódus helyett valami más nevet találni? Azt gyakran az osztálymetódusokra értik.

Jó lenne, hogy aki vitacímszóba ír, az egyrészt időrendben tenné, nem összevissza, és max. @<nicknév>-vel jelölné azt, hogy kinek válaszol, nem úgy, hogy a közepébe ír a vitacikknek. A másik, hogy tessék a hozzászólás végén a négy hullámosjelet (~) használni a nicknév és az időpecsét automatikusa beszúrására! 109.61.42.221 2010. július 13., 06:21 (UTC)

[szerkesztés]

Szia 109.61.42.221! FlamingClaw vagyok,és az objektumorientált programozás egy bizonyos részét én írtam. Turbo Pascal eszmét követve. Ha úgy gondolod nem helyes az amit írok, akkor javítsd ki, vagy írd le hogy például Java nyelven a statikus metódus mást jelent mint Turbo Pascalban. Egyébként a forrás 1990-ben kiadott könyv,melynek a lapjai szó szerint megsárgultak már,és kiszakadoztak a szétnyitogatástól. Amit megfigyeltem, az ,az , hogy akkor még jobban odafigyeltek az alapfogalmakra is, és nem úgy kezdték el a könyv megírását, hogy "Feltételezzük az Olvasó már jártas valamelyik magas szintű nyelv terén..." . Természetesen ez is nézőpont kérdése, mint nagyon sok minden más az életben. Minden nyelvnek megvan a maga szépsége, és hiányossága, erőssége és ezt mindenki maga dönti el, hogy melyik nyelvet válassza. Ha vannak építő jellegű gondolataid, bővítsd te is a wikit.FlamingClaw 2010. július 13., 06:50 (UTC)

[szerkesztés]

A virtuális metódusok címeit minden objektum a hozzá kapcsolódó VMT-ben tárolja, így minél több virtuális metódussal rendelkezik egy osztály, annál több helyet foglalnak a belőle példányosított objektumok.

Nem vagyok biztos benne, hogy a fordítók zöme ezt így csinálja. Nem az a bevett módszer, hogy a példányban csak egy mutató van a VMT-re, amiből nem objektumonként, hanem osztályonként van egy?

egy láncolt vagy asszociatív listában kerülnek tárolásra. A dinamikus metódusok hívása a leglassabb, mert a hívás helyén a konkrétan meghívandó metódus megállapításához a konkrét objektumpéldány típusának megállapítása után az objektum öröklési láncát is be kell járni egészen addig, amíg egy az adott dinamikus metódust deklaráló vagy felülíró osztályt nem találunk.

Megint csak kételyeim vannak. Nem lehet, hogy mivel az öröklési sor már fordításkor ismert, ezért az osztály VMT-jébe közvetlenül beírható a művelet pontos címe, vagyis nem kell a láncot bejárni? Van példa a fenti mechanizmusra?

Valahogy talán mindkét módszert meg kellene említeni. Doi 2010. augusztus 25., 06:20 (UTC)

[szerkesztés]

Szerintem még a témakör is olyan széles, hogy külön lapokra lehetne bontani egyes fontosabb és részletesebb magyarázatot igénylő részeit. Lényegesnek tartom az Objektum Orientált Paradigma alapos megismertetését. Ezt pl. azért lehet fontos, mert nagyon sok programozó, aki nem ezen nőtt fel, és csak később került vele kapcsolatba, máig sem vette át ezt a szemléletmódot. Noha kiválóan használja az adott nyelv objektumorientált eszközeit, és elfogadja, hogy egyes - leginkább grafikus - környezetben eseményvezéreltség van, mégis legfeljebb a struktúrált programozásig terjed a rutinja, és pl. az egységbezárást, öröklődést egy hasznos könnyítésnek véli, melyet vagy önállóan is használ, vagy csupán az adott programozói környezetben egy részfeladat kivitelezési módjának. Ezt saját tapasztalatból mondom, mert ezt az utat én is bejártam, s évekig élvezettel használtam a Turbo Pascal objektumorientált eszközeit, s írtam a Delphi esemenykezelő metódusat, amikor egyszer csak beugrott a paradigma lényege, és minden hirtelen más színben tünt fel (napokig alig tudtam magamhoz térni miatta). Az OOP paradigmát egyébként is használják olyan környezetben feladatmegoldási módszernek, ahol számítógépekről, annak programozásáról szó sincs! A másik amit megjegyeznék, és az előbbiekhez kapcsolódva megerősítenék, hogy három dolgot alaposan meg kell különböztetni:

  • Az OOP fogalmait (okát a fenti sirámom vázolja)
  • Az OOP eszközeinek megvalósításait egy adott nyelvben
  • Az adott nyelv realizálását egy konkrét platformon

Ha ez nem történik meg, akkor a kezdő programozó számára rengeteg félreértés adódik. Így lesz az, hogy az osztálymetódusokat statikusnak kezdjük hívni, a virtuálisakat meg gyakran dinamikusnak. A Delphiben pl. a virtuális metódusoknak kétféle realizálása létezik: a Turbo Pascalból átvett VMT-s módszer (ezt becézgetik ott virtuálisnak), a másik a Windows-tól átvett DMT-s (melynek a dinamikus a "gúnyneve"). Ez csupán kétfajta lehetőség a polimorfizmus megvalósítására, és az eredeti OOP-nak nem része. Ha kihasználjuk az adott megvalósítás "mélylélektanát", akkor elveszthetjük a platformfüggetlenséget. Remélem hogy az interface se marad majd ki... Tcs52 2010. augusztus 25., 10:41 (UTC)