3. fejezet: Mi az objektum-orientált programozás?

Objektum-orientált programozás (vagy OOP) a programozás paradigma vagy mintája, amelynek során a programozási probléma megoldását együttműködő objektumok gyűjteményeként modellezik. Az objektumok együttműködnek egymással, üzenetek küldésével. Ez a legmegfelelőbb nagy, összetett problémák kezelésére.

Az objektum olyan entitás, amely mind állapotot (vagy tulajdonságokat, vagy attribútumokat), mind viselkedést rendelkezik. Másképpen fogalmazva: egy objektum beágyazza az adatokat és az azokon működő funkciókat. Az adatokat általában más objektumok elrejtik, így az adatok befolyásolására csak az objektum funkciói (vagy módszerei) hatnak.

Egy tárgy például egy autó. Az autó tulajdonságaival rendelkezik (például szín, méret, súly, üzemanyag-kapacitás, utasszám stb.). Egy autó viselkedik a módszerei szerint (például indítsa el a motort, forduljon balra / jobbra, gyorsítson, álljon meg, kapcsolja be az ablaktörlőket stb.).

Az osztály egy speciális objektum, amelyet sablonként használnak önmagának példányok létrehozására. Gondoljon rá, mint egy olyan süti-vágó, amely sütiket (vagy objektumokat) állít elő.

Egy osztály örökölheti egy másik osztály (szülője) attribútumait és viselkedését, és módosíthatja vagy testreszabhatja ezt a viselkedést (azaz módszereit) saját maga számára. Ez a polimorfizmus fogalmához vezet. A polimorfizmus azt jelenti, hogy amikor egy objektum üzenetet kap, akkor a helyes módszert hívják meg, az objektum osztálya alapján. Ez a módszer a szülőhöz tartozhat, vagy lehet, amelyet ehhez az osztályhoz igazítottak.

Íme egy példa a polimorfizmusra:

A Smalltalk lehetővé teszi az osztály számára, hogy csak egy osztálytól örököljön. Néhány OOP nyelv lehetővé teszi az osztály számára, hogy több osztálytól örököljön; ezt nevezzük többszörös öröklésnek. A többszörös öröklés nagy bonyolultságot okoz, ezért általában kerüljük. A többszörös öröklésről nem is beszélünk.

Az öröklés az OOP fontos szempontja, de nem ez az egyetlen mód a programok felépítésére. Öröklés helyett összetétel vagy aggregálás is használható. Az osztály tartalmazhat más osztályok példányát anélkül, hogy bármit örökölne. Ez egy „kapcsolatban áll” kapcsolat, mint az alábbiak szerint: Az A osztály tagjaként B osztályú példányt képvisel. Ha öröklést használ, akkor a B osztály egyfajta A osztályú objektum lenne; ez egyfajta kapcsolat. Képzeljük el ezt példákkal ...

Az autó egyfajta motoros jármű (a szülői osztály). Tehát egy motorkerékpár. Tehát egy motorcsónak. Tehát egy repülőgép. Ezek mindegyike örökli a motoros jármű tulajdonságait és viselkedését. De testreszabhatják maguknak a szülőosztály attribútumait és módszereit is.

Az autónak önmagában más tárgyai vagy osztályai is vannak, mint például motor, kerekek, kormánykerék stb. Ezekből az osztályokból semmi nem örököl.

Szintaktikailag az objektum attribútumait (az objektum adatait) példányváltozók képviselik. Jellemzően „getter” módszereket (a példányváltozó értékének lekérdezését) és „setter” módszereket hoz létre számukra, mivel a példányváltozók rejtve vannak a külvilágtól.

A Pharo példányváltozókat hoz létre az osztálydefinícióban, például:

Nagysági alosztály: #Idő
   instanceVariableNames: 'másodperc nanos'
   classVariableNames: ''
   poolSzótár: 'ChronologyConstants'
   csomag: 'Kernel-Chronology'

A #Time osztályban (a #Time hash jelöli az Időt Smalltalk szimbólumként) két példányváltozó van: 'másodperc' és 'nanos'. Az objektum módszerei ezen változókon működnek, amelyek az objektum rejtett és belső állapotát képviselik.

Egyébként a #Time osztály a #Magnitude osztályból származik, vagy annak örököl. Alternatív megoldásként elmondhatja a Magnitude osztály „alosztályát” az Idő osztályt. Ez jellemző a Smalltalk nyelv.

Egy objektum hasonlít a hagyományos modulkoncepcióhoz, amelyet egyszerűbb eljárási programozási nyelvekben, például C és Pascal használnak. A modul tartalmazza az adatszerkezetet és a struktúrán működő funkciókat. Az adatok azonban nem rejtve vannak; bárki hozzáférhet az adatokhoz. A legfontosabb, hogy a modulok nem örökölhetnek más moduloktól.

Az objektumok általában sokkal finomabb szemcsék, mint a modulok. Ezért ideálisak komplex rendszerek modellezésére.

Szóval ennyi. Ez a bevezetés az objektum-orientált programozásba. Ha szeretné mélyebben tanulmányozni ezt az érdekes témát, rengeteg könyv és anyag található az OOP és a Smalltalk számára, például:

  • Smalltalk példaként, Alec Sharp
  • Kistalk, tárgyak és formatervező: Chamond Liu
  • Pharo példa alapján, készítette: Stéphane Ducasse, Dimitris Chloupis, Nicolai Hess, Dmitri Zagidulin