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

[nem ellenőrzött változat][nem ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
MauritsBot (vitalap | szerkesztései)
a Bot: következő hozzáadása: en:Objective-C; kozmetikai változtatások
Daviis (vitalap | szerkesztései)
29. sor:
 
=== Üzenetek ===
Az Objective-C objektum-orientált modellje az objektum pé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ö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:
 
foo->bar (parameter);
 
Ugyanez Objective-C nyelvben:
[foo bar:parameter];
 
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ás.
 
=== Interfészek és implementációk ===