Tavoite-C | |
Ensimmäisen version päivämäärä | 1983 |
---|---|
Paradigma | olio-suuntautunut , heijastava |
Kirjoittaja | Brad Cox ja Tom Love |
Viimeinen versio | 2.0 |
Kirjoittaminen | dynaaminen , staattinen , heikko |
Vaikuttanut | C , Smalltalk |
Vaikuttanut | TOM , Java , Swift |
Toteutukset | OpenStep , kaakao , GNUstep |
Käyttöjärjestelmä | UNIX, macOS |
Lisenssi | Vapaa |
Verkkosivusto | developer.apple.com/library/mac/navigation |
Tiedostopääte | h, m, mm ja C |
Objective-C on heijastava olio- ohjelmointikieli . Tämä on jatkoa ANSI C , kuten C ++: , mutta eroaa siitä sen dynaaminen viestin toimittamiseen, hänen kirjoittamalla heikko tai vahva, sen dynaaminen kirjoittamalla ja dynaamisen kuormituksen. Toisin kuin C ++, se ei salli useita perintöjä, mutta on tapoja yhdistää C ++: n ja Objective-C: n edut.
Nykyään sitä käytetään pääasiassa Apple- järjestelmien toiminnassa : macOS ja sen johdannainen iOS, joka perustuu luokkakirjastoon Cocoa, mutta GNU / Linuxin alla on myös luokkakirjaston ilmainen GNUstep . Kaakao ja GNUstep ovat OpenStep- sovellusliittymän , jota käytetään NeXTSTEP- käyttöjärjestelmissä (alun perin macOS), ja sen ilmaisen vastineen OPENSTEP: n seuraaja .
Lopussa 1970 leimasi orastavaa ja nopea suosio C-kielen keksi aiemmin vuosikymmenellä Dennis Ritchie on AT & T Bell Laboratories . Tätä suosiota tukee entistä suurempi suosio, kokonaan C: ssä kirjoitetun UNIX- käyttöjärjestelmän suosio. 1970-80- luvun vaihteessa nykyinen ohjelmistotekniikan käytäntö perustuu jäsenneltyyn ohjelmointiin . Jäsenneltyjen ohjelmointien toteuttamista käytetään suurten ohjelmien hajottamiseen pienempiin osiin, jotka ovat vähemmän monimutkaisia ja siten helpommin ohjelmoitavia. Kuitenkin, kun ongelmanratkaisu muuttuu suuremmaksi ja monimutkaisemmaksi, jäsennellystä ohjelmoinnista tulee vähemmän hyötyä, kun yhä enemmän menettelyjä on kirjoitettava, mikä johtaa monimutkaisiin ohjausrakenteisiin ja vähäiseen koodin uudelleenkäyttöön. Tuolloin monet näkivät olio-mahdollisen ratkaisun tähän ongelmaan.
Useat ihmiset luovat sitten laajennukset C: lle lisätäksesi olion. Tämä koskee Bjarne Stroustrupia, joka kehitti C ++: n vuonna 1979 samoissa laboratorioissa kuin Dennis Ritchien C syntyi. Objective-C: n syntymä tapahtuu samassa yhteydessä. Brad Cox kehitti sen 1980-luvun alkupuolella. Kieli esitetään C: n päällekkäisenä, jotta esineet voidaan luoda ja käsitellä ottamalla käyttöön tietyt Smalltalk-80- kielen käsitteet .
Objective-C: n koottu koodi toimii suoritusympäristössä ( runtime ), joka on kirjoitettu C: llä, mikä lisää vain vähän sovelluksen kokoa.
Ensimmäinen Objective-C- käyttöjärjestelmä oli Steve Jobsin perustama NeXT- yritys NeXTSTEP (myöhemmin uudeksi nimeksi OPENSTEP ) .
Objective-C on laajalti käytetty Macintosh , erityisesti mitä tulee Cocoa API ja Mac OS X: n ja nyttemmin kehittämiseen iPhone sovelluksia , The Apple älypuhelin .
Siellä on myös ilmainen OpenStep- kehyksen , nimeltään GNUstep , joka on alustojen välinen ja toimii erityisesti GNU / Linuxissa , Microsoft Windowsissa ja useimmissa UNIX: issa .
Objective-C: ssä kaikki on esine, aivan kuten Smalltalkissa, josta se on voimakkaasti innoittamana. Siksi se on voimakkaasti olio-orientoitu kieli. Yksinkertainen perintö saa aikaan perintöpuun, jolla on juuri: NSObject-luokka, jos kyseessä on Cocoa / NeXTSTEP, tai Object, jos GNUstep. Siitä johdetaan kaikki luokat. Esimerkiksi luokan NSString tai NSArray objekti on peräisin luokasta NSObject (epäsuorasti). NSMutableArray on peräisin NSArray-luokasta, joka on sen superluokka. Joidenkin käyttäjien mukaan tässä näkyy Objective-C: n voima: toisin kuin C ++ tai muut kielet, jotka eivät sisällä sitä, heikko kirjoittaminen helpottaa tietojen manipulointia.
Itse asiassa sen sijaan, että jouduttaisi käsittelemään monia tyyppejä, on vain muutama, esimerkiksi kaakaossa:
Lisäksi kaikki luokan ilmentymien muuttujat ovat oletusarvoisesti suojattuja, ja luokan menetelmät ovat julkisia. Siksi ohjelmoijilla on tiukempi ohjelmointi, samalla kun ne ovat nopeampi ja kunnioittavat OOP: n käsitteitä.
Toinen näkökohta on KVC (Key-Value Coding) -mallimalli , jonka inspiroi myös Smalltalk , joka määrittelee muuttujalle pääsyn nimellä. Esimerkiksi Person-luokan tapauksessa, jossa on Firstname-ilmentymämuuttuja, tyyppi NSString:
@interface Personne : NSObject { // variables d'instance NSString *prenom; } // methodes @property (copy) NSString *prenom; @endObjective-C sallii NSString-objektin nopean luomisen käyttämällä "@": ta samalla tavalla kuin "C" merkkijonoilla. NSStrings on koodattu unicode- koodiin , toisin kuin C, merkit eivät rajoitu ASCII-koodeihin. Siksi voimme asettaa Henkilön esiintymän sukunimimuuttujan arvon seuraavasti:
// On crée un pointeur vers un objet de la classe Personne, qu'on a d'abord alloué dans l'espace mémoire, et initialisé. Personne *exemple = [[Personne alloc] init]; //On envoie un message au pointeur exemple qui va le rediriger vers l'objet vers lequel il pointe, pour fixer la valeur de la clef surname. [exemple setValue:@"Paul" forKey:@"prenom"];Tavoite-C: ssä mikä tahansa luokan menetelmäpuhelu on viestin kulku. Kutsuaksesi objektin viesti, aseta objekti hakasulkeisiin ja sitten viesti. Voit ketjuttaa puhelut helposti. Joten esimerkissä method palauttaa objektin ja tälle objektille kutsutaan method2 .
// passage de message [objet methode:argument]; // chaînage de message [[objet methode:argument] methode2:argument2];
Menetelmien syntaksit, ensi silmäyksellä hieman hämmentävät, on suunniteltu tekemään siitä enemmän ihmisen kielen kaltainen. Jokainen argumentti erotetaan ":": llä sekä kommentilla.
Jokaisella objektiinstanssilla on isa-osoitin, joka on metaklassiobjektin osoitin, joka kuvaa menetelmät, joihin objekti pääsee. Luokalla, jolla on vanhempi, metaluokka edustaa puuta, jolla on koko luokkien hierarkia muistissa. Joten kun yritämme välittää viestin, Objective-C-ympäristö hakee objektin isa-osoittimen ja kulkee sitten metaklassipuun saadakseen kutsutun menetelmän osoittimen. Tämä mekanismi on tietysti kallis, mutta välimuistilaite ensimmäisen puhelun aikana tekee siitä erittäin tehokkaan.
Tavoite-C ++ on front-end varten GCC , joka kokoaa yhdistelmä C ++ ja tavoite-C- koodin . Objective-C ++ C ++ -laajennusten lisäksi, jotka Objective-C-kieli lisää C: n .