Cocoa ( englanniksi " cocoa " ) on Applen olio - sovellusliittymä macOS - käyttöjärjestelmälle . Se on yksi viidestä Mac OS X:n pääsovellusliittymästä - Cocoa, Carbon , Toolbox (vanhemmille Mac OS 9 -sovelluksille ), POSIX ja Java . Kieliä, kuten Perl , Python ja Ruby , ei pidetä tärkeimpinä kielinä, koska niillä ei ole vielä paljon vakavia sovelluksia Mac OS X:lle kirjoitettu.
Cocoaa käyttävät sovellukset kehitetään tyypillisesti Applen Xcode -kehitysympäristöllä (aiemmin Project Builder ) ja Interface Builderilla käyttämällä ohjelmointikieliä : C , Objective-C ja Swift . Cocoa-ympäristö on kuitenkin käytettävissä myös kehitettäessä muilla kielillä, kuten Ruby , Python ja Perl , käyttämällä linkkikirjastoja ( MacRuby , PyObjC ja CamelBones ). On myös mahdollista kirjoittaa Objective-C Cocoa -ohjelmia tavallisella tekstieditorilla ja kääntää ne manuaalisesti GCC- tai GNUstep-makescriptien avulla .
Loppukäyttäjän näkökulmasta Cocoa- sovellukset ovat Cocoa-ohjelmointiympäristöllä kirjoitettuja sovelluksia. Tällaisilla sovelluksilla on yleensä erottuva ulkoasu ja tuntuma, koska tämä ympäristö tekee Applen ihmiskäyttöliittymäohjeiden tukemisesta paljon helpompaa.
Cocoa on jatkoa NeXTSTEP- ja OPENSTEP- ohjelmistoympäristöille, jotka NeXT kehitti 1980-luvun lopulla. Apple osti NeXT:n joulukuussa 1996 ja aloitti työskentelyn Rhapsody - käyttöjärjestelmän parissa , josta oli määrä tulla OPENSTEPin välitön seuraaja. Sen piti sisältää ns. "Blue Box" ( Blue Box ) tarjoamaan Mac OS -sovellusten emulointia . Kirjastopohjaa ja tukea suoritettavalle OPENSTEP-tiedostomuodolle kutsuttiin "keltaiseksi laatikoksi" ( Yellow Box ). Rhapsody kehittyi Mac OS X:ksi ja Yellow Boxista tuli Cocoa. Tämän seurauksena Cocoa-luokkien nimet alkavat kirjaimilla NS (NeXTStep [1] ): NSString, NSArray jne.
Suurin osa OPENSTEPille kirjoitetusta koodista on mennyt Cocoaan ja Mac OS X:ään, mutta niissä on joitain eroja. Esimerkiksi NeXTSTEP ja OPENSTEP käyttivät Display PostScript -tekniikkaa tekstin ja grafiikan näyttämiseen näytöllä , kun taas Cocoa käyttää Applen Quartz -järjestelmää (joka käyttää samaa kuvantamismallia kuin PDF ). Lisäksi Cocoa tukee Internetiä, kuten NSURL-luokkaa ja WebKit -luokat HTML -työskentelyä varten , kun taas OPENSTEP:llä oli vain rajoitettu tuki verkkoyhteyksien kanssa NSFileHandle-luokan ja Berkeley-pistokkeiden kanssa.
Aiemmin tuotenimeä "Cocoa" käytettiin sovelluksen nimenä, jonka avulla lapset voivat luoda multimediaprojekteja. Tämä sovellus tunnettiin alun perin nimellä KidSim , mutta nyt sen omistaa kolmas osapuoli, ja sen nimi on Stagecast Creator . Ohjelman tuen lopettaminen toteutettiin Steve Jobsin paluuta Applelle seuranneen rationalisoinnin mukaisesti. Vanhaa nimeä käytettiin uudelleen uuden tavaramerkin rekisteröinnin viivästymisen välttämiseksi, ja Stagecast suostui kehittämään entisen Cocoan uudella nimellä.
Yksi Cocoa-ympäristön ominaisuuksista on mekanismi dynaamisesti varatun muistin hallintaan. NSObject-luokka, josta useimmat Cocoa-luokat, sekä vakio- että mukautetut, on johdettu, toteuttaa viitelaskentamekanismin muistin hallintaan . NSObjectista johdetut objektit vastaavat viesteihin retainja releasetallentavat viitemäärän, joka löytyy lähettämällä viesti objektille retainCount. allocTai -menetelmillä äskettäin luodun objektin copyviitemäärä on yksi. Viestin lähettäminen objektiin retainlisää viittausten määrää ja viestin lähettäminen release vähentää sitä. Kun viiteluku saavuttaa nollan, objekti poistetaan ja sen käyttämä muisti vapautetaan ( Objective-C- objektien muistin purkaminen on sama kuin C++-objektien destruktorin kutsuminen . Menetelmä dealloctoimii paljolti samalla tavalla kuin C++ :n destructor . puhelua ei taata.). Tämä viitelaskentatapa on hyvin samanlainen kuin Microsoftin COM ja sen IUnknown- liittymä . IUnknown tarjoaa toiminnot, jotka ovat samanlaisia kuin sekä ja . retainreleaseAddRefRelease
Viitelaskennan lisäksi ohjelmoijat voivat hyödyntää automaattisen julkaisun pooleja. Viestin lähettäminen autoreleaseobjektiin rekisteröi objektin nykyisen säikeen lähimpään automaattiseen julkaisuun tulevaa julkaisua varten. Kun itse automaattinen julkaisuvarasto vapautetaan, se lähettää viestin releasejokaisesta aiemmin lähetetystä viestistä autorelease. Automaattisesti puretut poolit luodaan ja vapautetaan tyypillisesti viestisilmukan alussa ja lopussa, jolloin varmistetaan, että ohjelman suoritus poistuu lohkosta, jossa objektit rekisteröitiin automaattista purkamista varten. Tämä tarkoittaa, että sovellus toimii ennustettavasti ja vapauttaa muistia läpinäkyvästi käyttäjälle, samalla kun automaattista roskienkeruuta käytetään useimmissa tapauksissa, ohjelma lakkaa yhtäkkiä vastaamasta käyttäjän toimiin käynnistyessään.
Automaattista roskien keräämistä Cocoassa on tuettu Objective-C 2.0:sta lähtien, kun se kehitettiin Xcode 3.0:ssa, joka sisältyy Mac OS X 10.5 Leopardin mukana. Ohjelmoijalla on nyt mahdollisuus valita automaattisen tai manuaalisen muistinkäsittelyn välillä. Mielipiteet ovat jakautuneet tehokkaimmasta tavasta hallita muistia. Jotkut ohjelmoijat väittävät, että viitteiden laskeminen on parempi, koska sen avulla kehittäjä voi hallita tarkasti, milloin objektit vapautetaan ilman, että se tarvitsee manuaalista muistin varaamista jokaiselle ohjelmassa käytettävälle objektille, eikä se aiheuta automaattiseen käyttöön liittyviä suorituskykyviiveitä. Roskakokoelma. Toiset sanovat, että tämä koko järjestelmä on hyödytön, että Java - tyylinen automaattinen roskienkeruu on paras ratkaisu, koska se vähentää huomattavasti ohjelmointivirheiden todennäköisyyttä muistin kanssa työskennellessä. Roskien kerääminen Cocoassa ei riko ohjelmien yhteensopivuutta taaksepäin, sitä käytetään vain siihen erityisesti koottuihin projekteihin.
On myös mahdollista yhdistää nämä kaksi lähestymistapaa. Nykyaikaiset roskankerääjät sallivat usein itsensä käynnistämisen ja pysäyttämisen kesken tehtävän, jolloin sovellus voi hallita järjestelmäkutsuille varatun ajan määrää. Tämän lähestymistavan yhdistäminen AppKit-pooliin, jotka julkaistaan automaattisesti viestisilmukan lopussa, näyttää tarjoavan parhaan kompromissin. Samanlainen järjestelmä on onnistuneesti toteutettu GNUstepissä , GNU :n vapaasti levitettävässä OpenStepin analogissa .
Cocoa koostuu pääasiassa kahdesta Objective-C -objektikirjastosta, joita kutsutaan Frameworksiksi . Kehykset ovat suunnilleen samat kuin dynaamiset kirjastot . Ne ovat koottuja objekteja, jotka ladataan ohjelman osoiteavaruuteen ajon aikana, mutta sen lisäksi kehyksiä ovat resurssit, otsikkotiedostot ja dokumentaatio. Cocoa sisältää myös versionhallintajärjestelmän, joka estää Microsoft Windowsissa kohtaamat ongelmat (ns. " DLL-helvetti ").
Cocoa-arkkitehtuurin avainelementti on näkymämalli. Ulkoisesti se on järjestetty tavallisen kehyksen tapaan, mutta toteutettu PDF :llä kaikkiin Quartzin tarjoamiin piirtotoimintoihin . Näin ohjelmoija voi piirtää mitä tahansa PostScript -tyyppisen kielen komentoja käyttäen . Lisäksi se tarjoaa automaattisesti mahdollisuuden tulostaa mikä tahansa näkymä. Koska Cocoa käsittelee rajaamista, vieritystä, skaalausta ja muita yleisiä grafiikan renderöintitehtäviä, ohjelmoija on vapautettu tarpeesta toteuttaa taustalla oleva infrastruktuuri ja hän voi keskittyä kehitettävän sovelluksen ainutlaatuisiin puoliin.
Xerox PARC : n Smalltalk -ohjelmoijatiimit kehittivät lopulta filosofian, jonka avulla he pystyivät yksinkertaistamaan kehitystä ja lisäämään merkittävästi uudelleenkäytettävän koodin määrää. Tämä MVC ( Model-View-Behavior ) -paradigmana tunnettu konsepti jakaa sovelluksen kolmeen vuorovaikutteisen luokan joukkoon. Malliluokat edustavat tietoja, kuten asiakirjoja, asetustiedostoja tai muistissa olevia objekteja. Näkymät, kuten nimestä voi päätellä, näyttävät tiedot (usein visuaalisesti). Käyttäytymisluokat sisältävät logiikan, joka linkittää mallit vastaaviin näkymiinsä ja pitää ne synkronoituna.
Cocoa-arkkitehtuurissa MVC:n periaatteita noudatetaan tarkasti. OpenStepissä useimmat luokat olivat joko korkean tason esityksiä (AppKit-luokat) tai suhteellisen matalan tason malliluokkia (kuten NSString). Verrattuna vastaaviin MVC-järjestelmiin OpenStepistä puuttui vahva mallipohja. Esimerkiksi asiakirjaa edustavaa perusluokkaa ei ollut. Cocoaan siirtymisen aikana mallipohjaa laajennettiin uskomattoman paljon sisältämään useita käyttövalmiita luokkia, jotka tarjosivat toimintoja, jotka ovat yhteisiä useimmille käyttäjäsovelluksille.
Mac OS X 10.3:ssa Apple esitteli NSControllerin, MVC-luokkien perheen, jotka tarjoavat normaalin käyttäytymisen toiminnot. Näitä luokkia pidetään osana Cocoa Bindings -järjestelmää, joka käyttää laajasti protokollia, kuten avainarvokoodausta ja avainarvon tarkkailua . Termi sitominen tarkoittaa kahden objektin, usein näkymän ja käyttäytymisen, sitomista. Cocoa Bindingsin avulla kehittäjä voi keskittyä kuvaamaan objektien välisiä suhteita sen sijaan, että kuvaisi ohjelman toimintaa yksityiskohtaisesti.
Mac OS X 10.4:n julkaisun myötä Apple laajensi ydinluokkia entisestään ottamalla käyttöön Core Data -kehyksen , joka automatisoi mallien muutosten seurannan ja tallentamisen (esimerkiksi tiedostoon). Tämä kehys yksinkertaistaa huomattavasti tietojen käsittelyä sovelluksessa tarjoamalla automaattisen tuen asiakirjojen lukemiseen tiedostosta ja niiden tallentamiseen tiedostoon sekä arkkitehtuurit muutosten kumoamiseksi ja palauttamiseksi.
Tarjoamalla kehyksiä tukemaan kaikkia kolmea MVC-kerrosta Applen tavoitteena on vähentää "liimakoodin" määrää, jota kehittäjien on kirjoitettava, ja siten vapauttaa aikaa sovelluskohtaisten ominaisuuksien kirjoittamiseen.
Oliopohjaisissa kielissä, kuten Java tai C++ , menetelmäkutsut esitetään fyysisesti muistissa osoittimina. Tämä rajoittaa sovelluksen suunnittelua, koska kutsuttavan menetelmän nimi on tiedettävä etukäteen. Vaikka Cocoa säilyttää tämän lähestymistavan suurimmaksi osaksi, Objective-C :n myöhäinen sidonta mahdollistaa enemmän joustavuutta.
Objective-C:ssä menetelmiä edustaa valitsin , joka on merkkijono, joka kuvaa kutsuttavan menetelmän. Kun viesti lähetetään objektille, Objective-C-ympäristö hankkii löytämänsä valitsimen ja kutsuu sitten vaadittua menetelmää. Koska valitsin on tekstimerkkijono, se voidaan tallentaa tiedostoon, siirtää verkon yli tai prosessien välillä tai käsitellä jollain muulla tavalla. Metodia kutsuttaessa suoritettavan koodin haku tehdään ajon aikana, ei ohjelman käännösaikana. Tämä vain hieman hidastaa suorituskykyä, mutta silti sallii saman valitsimen osoittaa menetelmän eri toteutuksia.
Samoin Cocoalla on kattava objektitekniikka nimeltä Key-Value Coding (KVC). Sen avulla voit käyttää kohteen tietoelementtiä tai ominaisuutta sekä muuttaa sitä ajon aikana nimellä - ominaisuuden nimi toimii avaimena sen arvoon. KVC johtaa äärimmäiseen suunnittelun joustavuuteen - sinun ei tarvitse tietää kohteen tyyppiä, mutta mikä tahansa sen ominaisuuksista voidaan saada KVC:llä. Lisäksi Cocoa-teknologia nimeltä Key-Value Observing (KVO) synkronoi automaattisesti toisiinsa liittyvien objektien ominaisuudet.
Yksi kaakaon hyödyllisimmistä asioista on järjestelmän tarjoamat tehokkaat "perusobjektit". Katso esimerkiksi Foundation NSStringand classes NSAttributedString, jotka tukevat Unicode - merkkijonoja, ja NSTextAppKitin järjestelmää, jonka avulla ohjelmoija voi näyttää merkkijonoja graafisessa käyttöliittymässä.
NSTextja niihin liittyviä luokkia käytetään merkkijonojen näyttämiseen ja muokkaamiseen. Näiden objektien avulla voit toteuttaa mitä tahansa sovelluksessa, yksinkertaisimmasta yksirivisestä tekstinsyöttökentästä asettelujärjestelmään, joka tukee sivutusta ja useita sarakkeita, sekä ammattimaisia typografisia ominaisuuksia, kuten välitys , ligatuurit , tekstin rivitys minkä tahansa muotojen ympärille, tekstiä. kierrokset, täysi tuki Unicodelle ja fonttien tasoittamiselle . Kappaleen ominaisuuksia voidaan ohjata sekä ohjelmallisesti että käyttäjän toimesta käyttämällä viivainobjektia, joka voidaan liittää mihin tahansa tekstiä näyttävään näkymään. Oikeinkirjoituksen tarkistus voidaan tehdä myös automaattisesti käyttämällä yhtä sanakirjaa kaikille sovelluksille ja Microsoftin pioneeria "kiirevä alleviivaus" (Cocoassa se näyttää punaiselta katkoviivalta). Mukana on sisäänrakennettu tuki rajoittamattomalle kumoamiselle ja uudelleen tekemiselle. Käyttämällä vain sisäänrakennettua toimintoa on mahdollista kirjoittaa tekstieditori 13 koodiriville . Uusien ohjainobjektien avulla tämä rivien määrä voidaan vähentää nollaan. Tämä on jyrkässä ristiriidassa Mac OS:n aiemmissa versioissa olevan TextEdit API:n kanssa.
Objective-C tekee olemassa olevien luokkien toiminnallisuuden laajentamisesta erittäin helppoa. Se tukee niin kutsuttuja luokkia , joiden avulla voit muokata olemassa olevia luokkia "paikoillaan". Luokkien avulla voit lisätä tarvittavat toiminnot tekemättä niihin muutoksia ja jopa ilman pääsyä olemassa olevien luokkien lähdekoodiin. Muissa yleisimmissä kielissä tämä vaatisi ohjelmoijalta uuden luokan, joka tukee lisätoimintoja, ja sen jälkeen vaivattomasti korvaamaan kaikki emoluokan käytetyt objektit tällä uudella.
Cocoa-kehykset on kirjoitettu Objective-C :llä , minkä vuoksi tämä kieli on valittu kaakaosovellusten kirjoittamiseen. Myös Java-kielelle on saatavilla paketti (Cocoa-Java Bridge), joka ei kuitenkaan ole erityisen suosittu kehittäjien keskuudessa. Lisäksi myöhäisen sitomisen käyttö tarkoittaa, että monia Cocoan avainominaisuuksia ei voida käyttää Javassa. Vuonna 2005 Apple ilmoitti, että Cocoa-Java poistetaan käytöstä. Toisin sanoen Cocoaan lisättyjä ominaisuuksia Mac OS X:n versioissa 10.4 jälkeen ei lisätä Cocoa-Java-käyttöliittymään.
Xcode Toolsin mukana tuleva AppleScript Studio mahdollistaa yksinkertaisten Cocoa-sovellusten kirjoittamisen AppleScriptiin . Cocoalle on myös kolmannen osapuolen komentosarjakieli, F-Script , joka mahdollistaa suoran pääsyn Cocoa-objekteihin ja tarjoaa joukon GUI-työkaluja niiden tilan seuraamiseen.
Kolmannen osapuolen paketteja on saatavana myös muille kielille: [2]
Lisäksi Cocoan ydinosista on ilmaisia toteutuksia, jotka mahdollistavat useiden alustojen (mukaan lukien Windows ) sovellusten kehittämisen:
On projekteja, jotka kääntävät Objective -C :ssä kirjoitetut Cocoa- sovellukset JavaScript -verkkosovelluksiksi :
Mac käyttöjärjestelmä | |
---|---|
Sovellukset | |
Apuohjelmat |
|
Tekniikka ja käyttöliittymä _ |
|
GUI-elementtien työkalupakkit (sarjat) . | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
matalatasoinen _ |
| ||||||||||||||||||||||||||
korkea taso |
|