Objective-C: განსხვავება გადახედვებს შორის

[შეუმოწმებელი ვერსია][შეუმოწმებელი ვერსია]
შიგთავსი ამოიშალა შიგთავსი დაემატა
Robot: Interwiki standardization
Robot: Cosmetic changes
ხაზი 14:
|თავი1 =
|სახელი1 = პარადიგმა
|მონაცემი1 = [[არეკვლა_არეკვლა (ინფორმატიკა)|ამრეკლავი]], [[ობიექტზე_ორიენტირებული_პროგრამირებაობიექტზე ორიენტირებული პროგრამირება|ობიექტზე-ორიენტირებული]]
|თავი2 =
|სახელი2 = გამოქვეყნების თარიღი
ხაზი 20:
|თავი3 =
|სახელი3 = პშემქმნელი
|მონაცემი3 = [[ბრად კოქსი|ბრად კოქსი]], [[ტომ ლოვი|ტომ ლოვი]]
|თავი4 =
|სახელი4 = კომპანია
ხაზი 29:
|თავი6 =
|სახელი6 = მთავარი ვერსიები
|მონაცემი6 = [[GNU_Compiler_CollectionGNU |Compiler Collection|GCC]], [[Apple]]
|თავი7 =
|სახელი7 = ენების გავლენით
|მონაცემი7 = [[Smalltalk]], [[C_C (პროგრამირების_ენაპროგრამირების ენა)|C]]
|თავი8 =
|სახელი8 = ენებზე ზეგავლენა
|მონაცემი8 = [[TOM_TOM (პროგრამირების ენა)|TOM]], [[Java_Java (პროგრამირების ენა)|Java]], [[Objective-J]]
}}
 
'''Objective-C''' არის [[არეკვლა_არეკვლა (ინფორმატიკა)|ამრეკლავი]], [[ობიექტზე_ორიენტირებული_პროგრამირებაობიექტზე ორიენტირებული პროგრამირება|ობიექტზე-ორიენტირებული]] [[პროგრამირების ენა]], რომელიც [[C_C (პროგრამირების_ენაპროგრამირების ენა)|C]]-ს უმატებს [[Smalltalk]]-ის ნაირ მესეჯების გაგზავნის მექანიზმს.
 
დღევანდელ დღეს იგი უმთავრესად გამოიყენება [[Apple]]-ის [[Mac OS X]]-სთვის და [[iPhone OS]]-თვის: მაინც თუ არ ეყრდობიან OpenStep სტანდარტს.
Objective-C არის [[Cocoa API]]-ის მთვარი პროგრამირების ენა, მაინც თუ იგი გამოყენებული იყო [[NeXT]]-ის [[NeXTSTEP OS]]-ის მთავარ ენად. ზოგადი Objective-C პროგრამები რომლებიც არ ხმარობემ ამ ბიბლიოთეკებს შესაძლოა კომპილირებული იყვნენ ნებისმიერი [[GNU_Compiler_CollectionGNU |Compiler Collection|GCC]] [[კომპილატორი|კომპილატორით]] (რომელიც Objective-C [[კომპილატორი|კომპილატორს]] შეიცავს) მხარდაჭერილ ოპერაციულ სისტემაში.
 
== ისტორია ==
 
1980 წლებში, პროგრამების შექმნის მიღებული მეთოდი იყო სტრუქტურული პროგრამირება. სტრუქტურული პროგრამირება, პროგრამების პატარა ნაწილებად დაყოფვას ადვიელებს, რომ დიდ პროგრამებზე მუშაობა საკმაოდ ადვილი დარჩეს. მაგრამ რახან პროგრამების მოცულობა იზდებოდა და იზდებოდა სტრუქტურული პროგრამირება საკმარისი აღარ იყო, სამაგიროდ იწერებოდა უფრო მეტი და მეტი პროცედურები (ფუნქციები), რაც პროგრამების კოდს ართულებდა და ამავე დროს კოდის ხელმეორედ გამოყენების უნარს.
 
[[ობიექტზე_ორიენტირებული_პროგრამირებაობიექტზე ორიენტირებული პროგრამირება|ობიექტზე-ორიენტირებულ]] პროგრამირებაში ბევრი ხედავდა ამ პრობლემების მოგვარების საშუალებას.
სიმართლე რომ ვთაქათ, [[Smalltalk]]-ს ამ პრობლემების უმრავლესი პუნქტი უკვე მოგვარებული ჰქონდა; მსოფლიოში არსებული ზოგიერთი ყველაზე კომპლექსური სისტემები [[Smalltalk]]-ში იყო დაწერილი.
 
ხაზი 57:
ორივე გაეწნო [[Smalltalk]]-ს როდესაც ისინი 1981 წელს იყვნენ ITT Corporation’s Programming Technology Center-ში კოქსი დაინტერესდა არსებული კოდის ხელახლა გამოყენების პრობლემებით.
იგი დარწმუნდა რომ ენა როგორიცაა [[Smalltalk]]-ი არა ეფექტური აღმოჩდებოდა ITT-ს სისტემირი პროგრამისტებისთვის.
კოქსმა წამოიწყო [[C_C (პროგრამირების_ენაპროგრამირების ენა)|C]] [[კომპილატორი|კომპილატორში]] წვლილებების შეტანა რომ [[Smalltalk]]-ის ზოგიერთი შესაძლებლობა დაემატებინა.
მან მალე მიიღო გამოსაყენი ვერსია რომელსაც [[C_C (პროგრამირების_ენაპროგრამირების ენა)|C]]-სთან ერთად ქონდა დამატებული ობიექტზე-ორიენტირებული საპორგრამო შესაძლებლობები, რომელსაც დაარქვა "OOPC" (Object-Oriented Programming in C).
ამასობაში, 1982 წელს, [[ტომ ლოვი|ლოვი]] აიყვანეს Schlumberger Research-ში და მას შესაძლებლობა მიეცა რომ პირველი Smalltalk-80-ის კომერციული ვერსია ეშოვა, რაც მის გამოგონებაზე ზეგავლენა მოახდინა.
 
ხაზი 66:
მიუხედავად იმისა რომ მან ხაზი გაუსვა იმას რომ კოდის ხელმეორედ გამოყენების პრობლების გადაწყვეტისთვის ენაზე მეტია საჭირო, Objective-C ხშირად აღმოჩდა შედარებული სხვა ენებთან მხოლოდ შესაძლებლობების ფონზე.
 
=== პოპულარობა NeXT-ის მეშვეობით ===
 
Apple-ის დატოვების შემდეგ, [[სტივ ჯობი|სტივ ჯობმა]] დააარსა კომპანია [[NeXT|NeXT-ი]].
ხაზი 79:
 
 
== სინტაქსი ==
 
Objective-C არის ძალიან thin [[C_C (პროგრამირების_ენაპროგრამირების ენა)|C-ის]] ზედა ფენა, არის [[C_C (პროგრამირების_ენაპროგრამირების ენა)|C-ზე]] დამატებული საშუალებები.
ასე რომ, შესაძლოა ნებისმიერი [[C_C (პროგრამირების_ენაპროგრამირების ენა)|C]] კოდის კომპილირება Objective-C კომპილერით, და [[C_C (პროგრამირების_ენაპროგრამირების ენა)|C]] კოდის შერწყმა Objective-C კლასთან.
 
Objective-Cის სინტაქსი მოდის Smalltalk-იდან. არა ობიექტზე-ორიენტირებული ოპერაციების სინტაქსი
(ცვლადები, ინსტრუქციები, ფუნქციის ახწერა, ფუნქციის გამოყენება) არის იგივე რაც [[C_C (პროგრამირების_ენაპროგრამირების ენა)|C-ში]], და [[ობიექტზე-ორიენტირებული]] ოპერაციების სინტაქსი მიბაძულია [[Smalltalk]]-ის მესეჯების გაგაზავნის სისტემასთან.
 
 
=== მესეჯები ===
 
Objective-Cის [[ობიექტზე_ორიენტირებული_პროგრამირებაობიექტზე ორიენტირებული პროგრამირება|ობიექტზე-ორიენტირებული]] პროგრამირების მოდელი არის ბაზირებული [[მესეჯების]] სხვა ობიექტების ნიმუშებთან გაგზავნაზე.
[[Simula]]-ს პროგრამირების სტილი, რომელიც გამოყენებულია [[C++]]ში, სემანტიკურად ხაზგასმით განსხვავდება.
Objective-Cში მეთოდემის დაძახება არ ხდემა, არამედ მათ უგზავნით მესეჯებს, ეს კონცეფტი განლაგებს თუ როგორ სრულდება მეთოდის კოდის შესრულება.
ხაზი 108:
 
ორივე პროგრამირების სტილს მიაჩნია თავისი პლიუსები და მინუსები.
[[Simula]]-ს ნაირი ობიექტზე-ორიენტირება მრავალ მემკვიდრეობას და კოდის ჩქარ შესრულებას უმართავს ხელს კომპილირების დროს ინფორნმაციების შეერთებით სადაც შესაძლოა მაგრამ არა აქვს [[დინამიური_შერწყმა_დინამიური შერწყმა (ინფორმატიკა)|დინამიური შერწყმის]] უნარი (ბრუნებრივ შემთხვევაში).
იგი აგრეთვე იძულებულს ხდის რომ ყოველივე მეთოდს ქონდეს მისი იმპლემენტაცია გარდა იმ შემთხვევაში თუ იგი ვირტუალურია, (იმპლემენტაცია მაინც საჭიროა რომ მეთოდის მოხმარება შეიძლებოდეს).
[[Smalltalk]]-ის ნაირი [[ობიექტზე_ორიენტირებული_პროგრამირებაობიექტზე ორიენტირებული პროგრამირება|ობიექტზე-ორიენტირება]] კი უშვებს მესეჯების გაგზავნას, რაც ანიჭებს დინამიურობას.
მესეჯის გაგზავნის მექანიზმი არ ხდის აუცილებელს რიმ გარკვეული ობიექტი ახწერილი იყოს კომპილირების დროს.
([[ტიპის დინამიკურად მინიჭება|ტიპის დინამიკურად მინიჭების]] შესახემ ქვემოთ იხილეთ ნუთუ რა უპირატესობა მოაქვს მას [[დინამიური_შერწყმა_დინამიური შერწყმა (ინფორმატიკა)|დინამიური შერწმის]] მეშვეობით).
 
უნდა შევნიშნოთ რომ, მესეჯების გარკვევის დროის გამო Objective-Cს მესეჯების გაგზავნა და მიყება მინიმუმ სამჯერ უფრო ნელია ვიდრე [[C++]]ის ვირტუალური მეთოდის გამოყენებით.[1]
 
=== ინტერფეისები და იმპლემენტაციები ===
 
Objective-C აიძულებს პროგრამისტს რონ კლასის ინტერფეისი და იმპლემენტაცია იყოს დაყოფილი კოდის სხვადასხვა ბლოკსი. მიღებული წესის მიხედვით, ინტერფეისი არის დაწერილი თავ ფაილში (header) (გაფართოება .h) და იმპლემენტაცია კი კოდის ფაილში (გაფართოება .m).
 
==== ინტერფეისი ====
 
უმრავლეს შემთხვევაში, კლასის ინტერფეისი არის ახწერილი თავ ფაილში (header file). მიღებული წესის მიხედვით თავ ფაილის (header file) სახელი არის კლასის სახელი.
ხაზი 159:
</source>
 
შეამჩნიეთ რომ instanceMethod2WithParameter წარმოადგენს Objective-Cის დასახელებული პარამეტრის (named parameter) შესაძლებლობას რომელიც არ არსებობს [[C_C (პროგრამირების_ენაპროგრამირების ენა)|C]]/[[C++]]ში.
 
დაბრუნული ცვლადის ტიპი შესაძლოა იყოს ნებისმიერი C-ს ტიპი, მითითება Objective-Cს ზოგად ობიექტთან, ან მითითება სპეციფიკურ ტიპთან როგორიცაა NSArray *, NSImage *, or NSString *.
ხაზი 173:
 
 
==== იმპლემენტირება ====
 
ინტერფეისი მარტო აღნიშნავს კლასის ინტერფეისს და არა თითონ მეთოდებს; მთავარი კოდი იწერება იმპლემეტირების დროს. იმპლემენტირების ფაულების გაფართოება არის .m.
ხაზი 189:
 
მეთოდები აწერებიან თავიანთი ინტერფეისის ახწერის მიხედვით.
Objective-Cს და [[C_C (პროგრამირების_ენაპროგრამირების ენა)|Cს]] შედარება:
 
<source lang="objc">
ხაზი 217:
მაგრამ, შიდა ფენაში მეთოდის ახწერილი სახელი იშვიათად გამოიყენება, და უმეტეს შემთხვევაში მესეჯების მექანიზმით (Objective-C runtime ბიბლიოთეკის მიხედვით) იხმარება მეთოდები - რომელი მეთოდის დაძახება მოხდება აუცილებელი არაა ცნობილი [[პროგრამის შერწყმა|პროგრამის შერწყმის]] დროს (link time): მიმღები კლასი (რომელიც მესეჯს იღებს) პროგრამის მოქმედების დროს იგებს.
 
==== ნიმუშის შექმნა ====
 
როცა Objective-Cში კლასი დაწერილია, მისი ნიმუშის შექმნა შესაძლო ხდება. ეს ხდება ახალი ობიექტისთვის საკმარისი მეხსიერების ნაყოფის მიცემით და მისი მონაცემის მინიჭებით. სანამ ეს ორი ეტაპი არ არის გავლილი ობიექტი ვერ იმოქმედებს. ეს ტიპიურად ერ ხაზი კოდით ხდება:
ხაზი 244:
=== პროტოკოლები ===
 
Objective-C იქნა დახვეწილი [[NeXT]] კომპანიაში,მას დაემატა მრავალი მემკვიდრების მხარდეჭერა სპეციფიკაციის დროს და არა იმპლემენტაციის დროს (ობიექტზე პროგრამირების კონცეპტი), [[პროტოკოლი (ობიექტზე პროგრამირება) | პროტოკოლების]] დაარსებით.ეს არის როგორც [[C++]]-ის მრავალ მემკვიდრეობიანი ფუძე კლასი ან როგორც [[Java_Java (პროგრამირების_ენა)პროგრამირების ენა)| ჯავას]] ან [[C_SharpC Sharp| C#]]-ის ინტერფეისი "interface". Objective-C იყენებს სპეციალურად შექმნილ პროტოკოლებს, რომლებსაც ეწოდება არაფორმალური პროტოკოლი (informal protocols), ან [[კომპილატორი | კომპილატორის]] მეშვეობით შექმნილი პროტოკოლი რომელსაც ეწოდება ფორმალური პროტოკოლი (formal protocols).
 
 
== რესურსები ინტერნეტში ==
 
* {{en}}[http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/ Introduction to The Objective-C Programming Language (Apple Developer Connection)]
ხაზი 266:
 
{{პროგრამირების_ენები}}
 
[[კატეგორია:დაპროგრამების ენები]]
 
მოძიებულია „https://ka.wikipedia.org/wiki/Objective-C“-დან