„Objective-C” változatai közötti eltérés

[ellenőrzött változat][ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
Rubinbot (vitalap | szerkesztései)
a Bot: következő hozzáadása: ar:سي-الكائنية
Syp (vitalap | szerkesztései)
31. sor:
 
=== Üzenetek ===
Az Objective-C objektum-orientált modellje az objektum példányokobjektumpéldányok közti [[üzenetküldés (számítástechnika)|üzenetküldésen]] alapul. Ez teljesen eltér a C++ stílusú programozási nyelvektől: itt nem az objektum egyik [[metódus (OOP)|metódusát]] hívjuk meg, hanem egy üzenetet küldünk az objektumnak és itt van a lényeges eltérés. A [[Simula]] stílusú nyelvekben a metódus neve a fordító által pontosan meg van határozva a [[kódszegmens]]ben, de a Smalltalkban és Objective-C-ben az üzenet csak egy név és futásidő alatt lesz meghatározva a tárbeli címe: a fogadó objektum kell feldolgozza a kapott üzenetet. EbbölEbből következik, hogy az üzenet küldésekor nincs típusellenőrzés, és nincs rá garancia, hogy az objektum válaszolni is fog az üzenetre. Ha nem tudja feldolgozni, akkor egyszerűen egy NULL [[pointer]]t ad vissza.
 
C++ kód egy objektum metódusának meghívására:
41. sor:
 
Mindkét stílusnak megvan az előnye és hátránya. A Simula OOP-ben többszörös [[öröklődés (OOP)|öröklődés]] és kisebb futásidő lehetséges, de alapértelmezetten nincs dinamikus kötés. Ugyanakkor kötelező (hacsak nem virtuális) minden metódusnak lennie egy implementációnak minden osztályban. A Samalltalk OOP lehetővé teszi, hogy az üzenetek ne legyenek implementálva. A Cocoa platform ezt kihasználja maximálisan: minden objektumnak a platform inicializáláskor elküldi az 'awakeFromNib:' üzenetet amint a program elindul, és erre az objektumok inicializálódhatnak. Ugyanakkor nem kötelző definiálni egy objektumot az üzenet küldésekor a kódban, dinamikus kötéssel a függöségeket a ''runtime'' oldja meg.
Egy Objective-C üzenet feldolgozása legalább háromszor annyi időbe telik, mint egy virtuális C++ metódus hívásmetódushívás.
 
=== Interfészek és implementációk ===