Keele areng c. §1 Üldine teave keele kohta. Programmi koostamise etapid. Rakenduse elutsükli mudelid. Rakenduse elutsükli mudelid

C++ on üldotstarbeline kompileeritud programmeerimiskeel, mis ühendab endas nii kõrgetasemeliste kui ka madalatasemeliste programmeerimiskeelte omadused. Võrreldes oma eelkäija C-programmeerimiskeelega on enim tähelepanu pööratud objektorienteeritud ja geneerilise programmeerimise toetamisele. Nimetus "C++ programmeerimiskeel" pärineb C programmeerimiskeelest, milles unaarne operaator ++ tähistab muutuja juurdekasvu.

C++ programmeerimiskeelt kasutatakse laialdaselt tarkvara arendamiseks. Nimelt erinevate rakendusprogrammide loomine, operatsioonisüsteemide, seadme draiverite, aga ka videomängude arendamine ja palju muud. Selle lõi 1980. aastate alguses Björn Stroustrup. Ta tegi oma vajaduste jaoks välja mitmeid C-programmeerimiskeele täiustusi. need. Algselt ei olnud plaanis luua C++ programmeerimiskeelt.

See toetab programmeerimisparadigmasid, nagu protseduuriline programmeerimine, objektorienteeritud programmeerimine, üldine programmeerimine, pakub modulaarsust, eraldi kompileerimist, erandite käsitlemist, andmete abstraktsiooni, objektitüüpide (klasside) deklareerimist, virtuaalseid funktsioone.

Saadud keelenimi pärineb C++ unary postfix inkrement operaatorist (suurendades muutuja väärtust ühe võrra). Nime C+ ei kasutatud, kuna see oli C-süntaksiviga ja ka seetõttu, et nimi oli hõivatud mõne muu keelega. Keelele ei antud ka nime D, kuna see "on C laiendus ega püüa probleeme lahendada C elementide eemaldamisega".

Keele eelised:

1. Skaleeritavus. Programmid töötatakse välja C++ keeles mitmesuguste platvormide ja süsteemide jaoks.

2. Oskus töötada madalal tasemel mälu, aadresside, portidega.

3. Võimalus koostada mallide abil üldistatud algoritme erinevat tüüpi andmetele, nende spetsialiseerumisele ja arvutustele kompileerimisetapis.

4. Platvormideülene. Kompilaatorid on saadaval paljude platvormide jaoks ning programme arendatakse C++ keeles väga erinevate platvormide ja süsteemide jaoks.

5. Tõhusus. Keel on loodud selleks, et anda programmeerijale maksimaalne kontroll programmi struktuuri ja täitmisjärjekorra kõigi aspektide üle.

Keele puudused:

1. Paljude tüübiohutuse põhimõtteid rikkuvate funktsioonide olemasolu viib selleni, et C++ programmidesse võivad kergesti hiilida väikesed vead.

2. Kehv toetus modulaarsusele. Välise mooduli liidese ühendamine päisefaili eelprotsessori sisestamise kaudu (#include) aeglustab kompileerimist suure hulga moodulite ühendamisel.

3. C++ keelt on raske õppida ja kompileerida.

4. Mõned tüüpide teisendused on ebaintuitiivsed. Eelkõige annab märgita ja märgiga numbriga tehmine märgita tulemuse.

5. Mõned inimesed peavad C++ keele puuduseks sisseehitatud prügikoristussüsteemi puudumist. Teisest küljest on C++-s piisavalt tööriistu, et ohtlike osutite kasutamine peaaegu välistada, prügikorjamise juurutamisel ja kasutamisel pole põhimõttelisi probleeme (raamatukogu, mitte keele tasemel). Sisseehitatud prügiveo puudumine võimaldab kasutajal valida oma ressursihaldusstrateegia.

Mis on C-keele sellise staatuse põhjuseks? Ajalooliselt on see keel lahutamatu Unixi operatsioonisüsteemist, mis nüüd kogeb oma taassündi. 60ndad olid operatsioonisüsteemide ja kõrgetasemeliste programmeerimiskeelte kujunemise ajastu. Sel ajal töötati välja operatsioonisüsteemid ja kompilaatorid iga arvutitüübi jaoks ja sageli isegi oma programmeerimiskeelte jaoks (pidage meeles näiteks PL/I). Samas on antud juhul tekkivate probleemide ühisosa juba ilmnenud. Vastus selle ühisuse teadvustamisele oli katse luua universaalne mobiilne operatsioonisüsteem ning selleks oli vaja ühtviisi universaalset ja mobiilset programmeerimiskeelt. C-st sai selline keel ja Unixist sai esimene OS, mis oli kirjutatud peaaegu täielikult kõrgetasemelises keeles.

Tihe seos Unixiga andis C-keelele katsepolügooni, mida ühelgi teisel keelel sel ajal polnud. Süsteemide programmeerimise probleeme peeti õigustatult sel ajal tööstuse kõige raskemateks. Enamasti olid need nii masinast sõltuvad, et paljud ei mõelnudki neid teisiti lahendada kui assembleris. Kõrgetasemelised keeled olid mõeldud rakenduste programmeerimiseks ja rakendasid ainult väga piiratud süsteemi tööks vajalikke funktsioone, sageli ainult teatud tüüpi masinate jaoks.

C-keel loodi algusest peale selleks, et sinna saaks kirjutada süsteemiülesandeid. C loojad ei töötanud välja abstraktset keeletäitja mudelit, vaid rakendasid selles lihtsalt need võimalused, mida süsteemi programmeerimise praktikas kõige rohkem vaja läks. Need olid peamiselt vahendid otseseks tööks mäluga, struktuursete juhtimisstruktuuridega ja programmi modulaarse korraldusega. Ja sisuliselt midagi muud sellesse keelde ei lisatud. Kõik muu pandi käitusaja teeki. Seetõttu viitavad halvustajad mõnikord C-keelele kui struktuurikoostajale. Kuid hoolimata sellest, mida nad ütlesid, osutus lähenemine väga edukaks. Tänu temale jõuti lihtsuses ja keeleoskuses uuele tasemele.

Siiski on veel üks tegur, mis määras keele edukuse. Loojad eraldasid selles väga osavalt masinast sõltuvad ja sõltumatud omadused. Tänu sellele saab enamikku programme kirjutada universaalselt – nende jõudlus ei sõltu protsessorist ja mäluarhitektuurist. Mõned riistvarast sõltuvad koodi osad saab lokaliseerida eraldi moodulitesse. Ja eelprotsessori abil saab luua mooduleid, mis erinevatel platvormidel kompileerituna genereerivad vastava masinast sõltuva koodi.

Palju poleemikat on tekitanud C-keele süntaks, milles kasutatavad lühendamisvõtted võivad liigsel kasutamisel muuta programmi täiesti loetamatuks. Kuid nagu Dijkstra ütles, ei ole vahendid süüdi selles, et neid kasutatakse kirjaoskamatult. Tegelikult vastavad C-s välja pakutud süntaksilühendid praktikas levinuimatele stereotüüpsetele olukordadele. Kui käsitleme lühendeid selliste olukordade väljendusrikka ja kompaktse esituse idioomidena, muutuvad nende eelised tingimusteta ja ilmselgeks.

Seega kujunes C universaalseks programmeerimiskeeleks. Kuid ta ei jäänud nendesse piiridesse. 80ndate lõpuks saavutas C-keel, mis oli Fortrani juhtpositsioonilt välja tõuganud, kogu maailmas programmeerijate seas tohutu populaarsuse ja seda hakati kasutama mitmesugustes rakenduslikes ülesannetes. Olulist rolli mängis siin Unixi (ja seega ka C) levik ülikoolikeskkonnas, kus koolitati välja uue põlvkonna programmeerijad.

Nagu kõiki keeli, on ka C-d järk-järgult täiustatud, kuid enamik täiustustest pole olnud radikaalsed. Kõige olulisem neist tuleks ehk pidada funktsioonitüüpide range spetsifikatsiooni kehtestamist, mis suurendas oluliselt moodulitevahelise suhtluse usaldusväärsust C-s. Kõik sellised täiustused fikseeriti 1989. aastal ANSI standardis, mis siiani määratleb C keel.

Aga kui kõik on nii roosiline, siis miks jätkatakse kõigi teiste keelte kasutamist, mis toetab nende olemasolu? C-keele Achilleuse kand seisnes selles, et see osutus 90ndatel päevakorda võetud ülesannete jaoks liiga madalaks. Pealegi on sellel probleemil kaks aspekti. Ühelt poolt olid keelde sisse ehitatud liiga madala tasemega tööriistad – eelkõige mäluhaldus ja aadressiaritmeetika. Mitte ilmaasjata ei mõju protsessorite bitimahu muutmine paljudele C programmidele väga valusalt. Teisest küljest puuduvad C-l kõrgetasemelised funktsioonid - abstraktsed andmetüübid ja objektid, polümorfism, erandite käsitlemine. Seetõttu domineerib C-programmides ülesande realiseerimise tehnika sageli selle sisu üle.

Esimesed katsed neid puudusi parandada hakati tegema 80ndate alguses. Juba siis hakkas Bjarne Stroustrup AT&T Bell Labsist arendama C-keele laiendust koodnime all. Arendusstiil oli üsna kooskõlas C-keele enda loomise vaimuga - sellesse viidi sisse teatud funktsioone, et muuta konkreetsete inimeste ja rühmade töö mugavamaks. Uue keele esimene kommertstõlk nimega C++ ilmus 1983. aastal. See oli eelprotsessor, mis tõlkis programmi C-koodiks. Keele tegelikuks sünniks võib aga lugeda Stroustrupi raamatu ilmumist 1985. aastal. Sellest hetkest alates hakkas C++ koguma ülemaailmset populaarsust.

C++ peamiseks uuenduseks on klassimehhanism, mis võimaldab defineerida ja kasutada uusi andmetüüpe. Programmeerija kirjeldab klassiobjekti sisemist esitust ja funktsioonimeetodite komplekti sellele esitusele juurdepääsuks. Üks hellitatud eesmärke C++ loomisel oli soov suurendada juba kirjutatud koodi taaskasutamise protsenti. Klasside kontseptsioon pakkus selleks pärimismehhanismi. Pärand võimaldab luua uusi (tuletatud) klasse laiendatud esituse ja muudetud meetoditega, ilma et see mõjutaks algsete (baas)klasside kompileeritud koodi. Samal ajal annab pärimine ühe polümorfismi rakendamise mehhanismi - objektorienteeritud programmeerimise põhikontseptsiooni, mille kohaselt saab sama koodi abil teostada erinevat tüüpi andmete sama tüüpi töötlemist. Tegelikult on polümorfism ka üks koodi taaskasutamise tagamise meetodeid.

Klasside juurutamine ei ammenda kõiki C++ keele uuendusi. See rakendab täieõiguslikku struktureeritud erandite käsitlemise mehhanismi, mille puudumine C-s muutis usaldusväärsete programmide kirjutamise palju keerulisemaks, mallimehhanismi – keerukat makrogeneratsioonimehhanismi, mis on keele sisse ehitatud, avades teise tee koodi taaskasutamiseks, ja palju muud.

Seega oli keele üldine arengusuund suunatud selle võimaluste laiendamisele uute kõrgetasemeliste konstruktsioonide juurutamise kaudu, säilitades samal ajal võimalikult täieliku ühilduvuse ANSI C-ga. Loomulikult käis võitlus ka keele taseme tõstmise nimel. teine ​​rind - samad klassid võimaldavad pädeva lähenemisviisiga varjata madala taseme toiminguid, nii et programmeerija lõpetab tegelikult töö otsese mälu ja süsteemist sõltuvate üksustega. Kuid keel ei sisalda mehhanisme, mis sunniksid arendajat programmi õigesti struktureerima, ja autorid ei ole andnud süstemaatilisi soovitusi selle üsna keerukate konstruktsioonide kasutamiseks. Samuti ei hoolitsenud nad õigeaegselt standardse klassiteegi loomise eest, mis rakendab kõige sagedamini esinevaid andmestruktuure.

Kõik see viis selleni, et paljud arendajad olid sunnitud ise keelelise semantika labürinte uurima ja iseseisvalt edukalt toimivaid idioome leidma. Näiteks keelearenduse esimesel etapil püüdsid paljud klassiraamatukogude loojad luua ühtse klasside hierarhia ühise baasklassiga Object. See idee laenati Smalltalkist, ühest kuulsaimast objektorienteeritud keelest. C++-s osutus see aga täiesti elujõuetuks - hoolikalt kujundatud klassiraamatukogude hierarhiad osutusid paindumatuks ning klasside töö ei paistnud silma. Selleks, et klassiteegid oleksid kasutatavad, tuli need esitada lähtekoodina.

Mallklasside tekkimine lükkas selle arengusuuna täielikult ümber. Pärimist hakati kasutama ainult juhtudel, kui oli vaja genereerida olemasoleva klassi spetsiaalne versioon. Raamatukogud hakkasid koosnema eraldi klassidest ja väikestest mitteseotud hierarhiatest. Kuid sellel teel hakkas koodi taaskasutamine vähenema, kuna C++-s on sõltumatute hierarhiate klasside polümorfne kasutamine võimatu. Mallide laialdane kasutamine toob kaasa kompileeritud koodi mahu lubamatu suurenemise - ärgem unustagem, malle rakendatakse makrogenereerimismeetodite abil.

Üks tõsisemaid C++ puudusi, mille see C-süntaksist päritud on, on kompilaatori võime kirjeldada kõigi kasutatavate klasside sisemist struktuuri. Selle tulemusena toob raamatukogu klassi esituse sisemise struktuuri muutmine kaasa vajaduse kõik programmid, kus seda teeki kasutatakse, uuesti kompileerida. See piirab oluliselt raamatukogude arendajatel nende uuendamist, sest uue versiooni avaldamisel peavad nad säilitama binaarse ühilduvuse eelmise versiooniga. Just see probleem paneb paljud eksperdid uskuma, et C++ ei sobi suurte ja väga suurte projektide läbiviimiseks.

Ja hoolimata loetletud puudustest ja isegi keelestandardi kättesaamatusest (see on pärast enam kui viisteist aastat kasutust!), on C++ endiselt üks populaarsemaid programmeerimiskeeli. Selle tugevus seisneb eelkõige peaaegu täielikus ühilduvuses keelega C. Tänu sellele on C++ programmeerijatel juurdepääs kõikidele C-keeles tehtud arendustele. Samas toob C++ isegi ilma klasse kasutamata C-sse mitmeid nii olulised lisafunktsioonid ja mugavused, et paljud kasutavad seda lihtsalt täiustatud C-na.

Mis puutub C++ objektimudelisse, siis seni, kuni teie programm ei muutu väga suureks (sadu tuhandeid ridu), on see üsna kasutatav. Hiljutine suundumus komponendipõhise tarkvara poole tugevdab ainult C++ positsiooni. Üksikute komponentide väljatöötamisel C++ puudused veel ei ilmne ning komponentide sidumine toimivaks süsteemiks ei toimu enam keele, vaid operatsioonisüsteemi tasemel.

Kõike öeldut silmas pidades ei paista C++ väljavaated kehvad. Kuigi tal ei ole programmeerimiskeelte turul monopoli. Võib-olla saame kindlalt väita, et järjekordset moderniseerimist-laienemist see keel üle ei ela. Pole asjata, et Java ilmumisel pälvis see nii suurt tähelepanu. Keel, mis on süntaksilt C++-le lähedane ja tundub seetõttu paljudele programmeerijatele tuttav, on säästnud 70ndatest päritud C++ kõige silmatorkavamatest puudustest. Tundub aga, et Java ei täida rolli, mille mõned inimesed on talle määranud.

C/C++ keelte eriline roll kaasaegses programmeerimises muudab konkreetsete aadresside esitamise Internetis praktiliselt mõttetuks, kust leiate nende kohta materjale. Selliseid kohti on lihtsalt liiga palju. Kui aga olete huvitatud C++ evolutsiooni kohta rohkem teada saama, siis alustage sellest lühikesest artiklist http://citforum.syzran.ru/programming/prg96/76.shtml.

Aleksander Sergejev, [e-postiga kaitstud]
Artikkel ajakirjast BYTE/Russia, märts 2000

Kirjeldatud keelte praktikas kasutamise selgeks demonstreerimiseks valisime ülesande, mille puhul oli vaja sisestada standardsisendist või failist täisarvude jada ja seejärel väljastada ainult paaritu, vastupidises järjekorras. . See on üks lihtsamaid probleeme, mille lahendamiseks on sisuliselt vaja töötada massiivide, silmuste, hargnemise ja I/O-ga ning mis võimaldab demonstreerida ka alamprogrammikutseid. Samas on see nähtav ja kergesti tajutav.

Nimekiri 1. C

1 #kaasa /* Ühendage I/O funktsioonid */ 2 3 void main(void) 4 ( 5 int M; /* Massiivi 10 täisarvust, loendatakse 0-st */ 6 int N; 7 jaoks (N=0; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>=0; --N) /* Käime massiivi tagurpidi */ 12 if (M[N]%2) /* järjekorras ja prindime paarituid */ 13 printf("%d\n", M[N]); 14 )

  • 3. rida. C/C++ puhul algab programmi täitmine alati põhifunktsioonist.
  • 7. ja 11. read. Silmuse päises on näidatud semikooloniga eraldatud algseade, jätkamise tingimus ja tsükli parameetri ümberarvutamise reegel. Operatsioonid ++ Ja -/- - C-keele kuulsaimad lühendid, mis tähendavad muutuja suurendamist ja vähendamist, see tähendab selle väärtuse suurendamist ja vähendamist ühe võrra.
  • 8. rida. Funktsioon scanf sisestab vastavalt esimese parameetriga määratud vormingule muutujate väärtused, mille aadressid on määratud ülejäänud parameetritega. Siin arvutatakse aadress, kuhu väärtus sisestatakse, kasutades massiivi asukoha aadressi aadressi aritmeetikat M nihe lisandub N elemendid. Sama efekti saab saavutada ka kirjutades &M[N].
  • 12. rida. Operatsioon % arvutab jaotuse ülejäänud osa. Operaatori seisund kui loetakse täidetuks, kui avaldise arvväärtus erineb nullist.
  • 13. rida. Funktsioon printf- formaadi järgi printimine toimib samamoodi scanf, kuid aadresside asemel edastatakse väljastatavad väärtused.
1 #kaasa 2 3 mall klass Massiiv 4 ( 5 avalik: massiiv (T suurus=1) : M (uus T), N(suurus), n(0) () 6 massiiv (tühine) ( kustuta M;) 7 T Count (void) const ( tagasi n; ) 8 T operaator (int i) const ( tagasta M[i]; ) 9 tühine Lisa (T andmed); 10 privaatne: 11 T* M; // Hajusmälu aadress 12 int N, n; // N - hajutatud;n - kasutatud 13); 14 15 mall tühi massiiv ::Add(T Data) 16 ( if (N-n) // Kui kõik eraldatud 17 on ära kasutatud ( int* P = new T; // tühik, jagage rohkem 18 jaoks (int i=0; i A; // Muutuva suurusega täisarvude massiiv 28 while (1) // Lõpmatu tsükkel 29 ( int N; 30 cin >> N; // cin - standardne sisendvoog 31 if (cin.eof()) katkeb; // tsüklist väljumine faili lõpus 32 A.Add(N); // Lisa sisestatud number massiivi 33 ) 34 for (int N=A.Count()-1; N>=0; --N) // Käi läbi massiiv 35 if ( A[N]%2) 36 cout<ja vabastage mälu
  • read 3-13. Malli klass on deklareeritud Massiiv parameetriga T. See on muutuva suurusega tüüpi objektide massiiv T. Muidugi pole meie ülesandes vaja malliklassi kasutada. Tahtsime aga näidata, kuidas C++ saab luua polümorfse andmestruktuuri, mis suudab töötada mis tahes tüüpi elementidega.
  • 5. rida. Klassi konstruktor. See lähtestab objekti esituse. Näiteks põllul M sisestatakse toiminguga tellitud mäluploki aadress uus T.
  • 8. rida. Näide operatsioonide ülekoormusest. Funktsioon operaator kutsutakse välja, kui klassiobjektist paremale ilmuvad nurksulud Massiiv.
  • 9. rida. See funktsioon on rakendamisel peamine. See lisab massiivi elemente, laiendades seda vastavalt vajadusele. Kuna see on teistest keerulisem, on selle määratlus võetud klassi kirjeldusest. Klassi kehas kirjeldatud funktsioonid realiseeritakse C++-s mitte väljakutsumise, vaid sisemise asendamise teel. See kiirendab programmi, kuigi suurendab selle suurust.
  • read 15-24. Funktsiooni definitsioon Massiiv::Lisa(T)(see on muide tema täisnimi).
  • 27. rida. Looge tüüpi objekt Massiiv. Mall Aggau parameetrite järgi tüübi järgi int.

C++ (loe c-plus-plus) on kompileeritud, staatiliselt trükitud üldotstarbeline programmeerimiskeel, milles saate luua mis tahes keerukusega programme.
Rohkem kui 20 aastat on see keel olnud kolme populaarseima ja nõutuima programmeerimiskeele hulgas. (Saate seda kontrollida, külastades TIOBE veebisaiti).
Keel sai alguse 1980. aastate alguses, kui Bell Labsi töötaja Björn Stroustrup pakkus oma vajadusteks välja mitmeid C-keele täiustusi.

Bjarne Stroustrup – C++ keele looja

Stroustrup otsustas laiendada C-keelt Simula keeles leiduvate võimalustega. C, mis on UNIX-süsteemi baaskeel, millel Belli arvutid töötasid, on kiire, funktsioonirikas ja kaasaskantav. Stroustrup lisas oskuse töötada klasside ja objektidega. Selle tulemusena osutusid praktilised modelleerimisülesanded lihtsasti lahendatavaks nii arendusaja (tänu Simula-laadsete klasside kasutamisele) kui ka arvutusaja osas (tänu C kiirusele).
Keelearendaja ise sellest räägib järgmiselt:



1998. aastal avaldas standardikomitee esimese keelestandardi, tuntud kui C++98. C++ areneb jätkuvalt, et vastata tänapäeva nõuetele. Üks C++ keelt arendavatest ja C++ standardite komiteele selle täiustamise ettepanekuid esitavatest rühmadest on Boost, mis tegeleb muuhulgas keele võimaluste parandamisega, lisades sellele metaprogrammeerimisfunktsioone. Viimane standard ilmus 2017. aastal ja seda nimetatakse C++17. Järgmine standard ei lase end kaua oodata ja see peaks ilmuma 2020. aastal.
Kellelgi pole õigusi C++ keelele, see on tasuta. 2016. aasta märtsis loodi Venemaal töörühm WP21 C++. Töörühm moodustati C++ standardi ettepanekute kogumiseks, komisjonile saatmiseks ja Rahvusvahelise Standardiorganisatsiooni üldkoosolekutel kaitsmiseks.
C++ on mitme paradigma keel (sõnast paradigma – arvutiprogrammide kirjutamise stiil), mis sisaldab laia valikut erinevaid programmeerimisstiile ja tehnoloogiaid. Sageli liigitatakse see objektorienteeritud keeleks, kuid rangelt võttes see nii ei ole. Tööprotsessi käigus saab arendaja täieliku vabaduse tööriistade valikul, et konkreetse lähenemise abil lahendatud probleem saaks võimalikult tõhusalt lahendatud. Teisisõnu, C++ ei sunni programmeerijat järgima ainult ühte programmi arendusstiili (näiteks objektorienteeritud).
C++-l on rikkalik standardteek, mis sisaldab tavalisi konteinereid ja algoritme, I/O-d, regulaaravaldisi, mitme lõime tuge ja muid funktsioone. C++ on mõjutanud paljusid programmeerimiskeeli, sealhulgas: Java, C#, D. Kuna C++ kuulub C-keele süntaksil põhinevasse keelte perekonda, saate hõlpsasti omandada selle perekonna teisi programmeerimiskeeli: JavaScript, PHP , Perl, Objective-C ja paljud teised . jne, sealhulgas emakeel ise - C. ()
Oma eksisteerimise jooksul on C++ keel omandanud püsivaid müüte, mida on lihtne ümber lükata (vt siit: 1. osa ja 2. osa)

Keele ja standardite väljaandmise ajalugu

1983

Keele looja on Björn Stroustrup, Bell Labsi töötaja, tutvustas C++ keele varajast versiooni (C with classes)

1985

C++ esimene kommertsväljaanne, keel saab oma kaasaegse nime

1986

Ilmus C++ programmeerimiskeele esimene väljaanne – C++-le pühendatud raamat, mille autor on Björn Stroustrup

1998

Rahvusvaheline C++ keele standard on ratifitseeritud: ISO/IEC 14882:1998 “Standard for the C++ Programming Language”

2003
2005

Raamatukogu tehniline aruanne 1 (TR1) on avaldatud. Kuigi aruanne ei ole ametlikult osa standardist, kirjeldas aruanne standardteegi laiendusi, mis peaksid sisalduma C++ keele järgmises versioonis.

2011

Uue standardi väljaandmine – C++11 või ISO/IEC 14882:2011; uus standard hõlmas keeletuumiku täiendusi ja standardteegi, sealhulgas suurema osa TR1 laiendamist

2014

C++14 standardi väljaandmine (“Rahvusvaheline standard ISO/IEC 14882:2014(E) programmeerimiskeel C++”); C++14 võib vaadelda kui C++11 väikest laiendust, mis sisaldab peamiselt veaparandusi ja väiksemaid täiustusi

2017

Uue standardi väljalase – C++1z (C++17). See standard tõi kaasa palju muudatusi ja täiendusi. Näiteks sisaldas STD C11 standardi teeke, boost::filesystemil põhinevat failisüsteemi ja enamikku eksperimentaalsest TS I teegist.

2020

C++20 on C++ programmeerimiskeele ISO/IEC standardi mitteametlik nimetus, mis peaks järgima C++17. N4800 standardi kavand.

C++ filosoofia

Björn Stroustrup kirjeldab oma raamatus The Design and Evolution of C++ (2007) põhimõtteid, mida ta järgis C++ (lühendatult) kujundamisel:

  • Hankige staatiliste andmetüüpidega üldkasutatav keel, C-keele tõhusus ja kaasaskantavus.
  • Toetage otseselt ja igakülgselt erinevaid programmeerimisstiile.
  • Andke programmeerijale valikuvabadus, isegi kui see annab talle võimaluse valesti valida.
  • Säilitage nii palju kui võimalik ühilduvus C-ga, muutes seeläbi võimalikuks lihtsa ülemineku C-programmeerimiselt.
  • Vältige lahknevusi C ja C++ vahel: iga konstruktsioon, mis kehtib mõlemas keeles, peab tähendama mõlemas keeles sama asja ja viima programmi sama käitumiseni.
  • Vältige funktsioone, mis sõltuvad platvormist või ei ole universaalsed.
  • "Ära maksa selle eest, mida te ei kasuta" - ükski keelefunktsioon ei tohiks põhjustada nende programmide jõudluse vähenemist, mis seda ei kasuta.
  • Ärge vajage liiga keerulist programmeerimiskeskkonda.

C ja C++

C++ süntaks on päritud C-keelest. Kuigi formaalselt jääb üheks C++ põhimõtetest C-keelega ühilduvuse säilitamine, siis tegelikult nende keelte standardimisrühmad omavahel ei suhtle ja nende tehtud muudatused ei toimi. ainult ei korreleeru, vaid on sageli ideoloogiliselt põhimõtteliselt vastuolus. Seega on elemendid, mida uued C-standardid kernelile lisavad, standardteegi C++ standardi elementides ja ei ole üldse tuumas, näiteks dünaamilised massiivid, fikseeritud piiridega massiivid, paralleelsed töötlemisvõimalused. Stroustrupi sõnul oleks nende kahe keele arengu kombineerimine palju kasu, kuid poliitilistel põhjustel pole see tõenäoliselt võimalik. Seega kaob järk-järgult praktiline ühilduvus C ja C++ vahel.
Selles näites väljastatakse sõltuvalt kasutatavast kompilaatorist kas "C++" või "C".

Programm 9.1

#kaasa int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); return 0; )

Selle põhjuseks on asjaolu, et C-s on märgikonstandid tüüpi int ja C++-s char tüüpi, kuid nende tüüpide suurused on erinevad.

Rakenduse elutsükli mudelid

Eluring tarkvara on ajavahemik, mis algab hetkest, mil tehakse otsus tarkvaratoote loomise vajaduse kohta ja lõpeb hetkel, mil see täielikult kasutusest kõrvaldatakse. See tsükkel on tarkvara loomise ja arendamise protsess. Olelustsükli mudeleid on mitu.
Kaskaadmudel elutsükli (inglise kose mudel) pakkus välja 1970. aastal Winston Royce. See näeb ette projekti kõigi etappide järjestikuse rakendamise rangelt fikseeritud järjekorras. Üleminek järgmisele etapile tähendab töö täielikku lõpetamist eelmises etapis. Nõuete kujundamise etapis kindlaksmääratud nõuded on rangelt dokumenteeritud tehniliste kirjelduste vormis ja salvestatakse kogu projekti arenduse jooksul. Iga etapp kulmineerub täieliku dokumentatsioonikomplekti avaldamisega, mis on piisav, et võimaldada arendustegevuse jätkamist teisel arendusmeeskonnal.
Projekti etapid vastavalt kose mudelile:

  1. Nõuete kujundamine;
  2. Disain;
  3. Rakendamine;
  4. Testimine;
  5. Rakendamine;
  6. Kasutamine ja hooldus.

Kaskaadmudelis eeldab ühest projektifaasist teise üleminek, et eelmise etapi tulemus on täiesti õige. Suurte projektide puhul on seda peaaegu võimatu saavutada. Seetõttu sobib see mudel ainult väikese projekti arendamiseks. (W. Royce ise sellest mudelist kinni ei pidanud ja kasutas iteratiivset mudelit).
Iteratiivne mudel
Alternatiiviks kaskaadmudelile on iteratiivse ja inkrementaalse arengu (IID) mudel, mis sai T. Gilbilt 70ndatel. evolutsioonimudeli nimi. IID-mudel hõlmab projekti elutsükli jagamist iteratsioonide jadaks, millest igaüks meenutab "miniprojekti", sealhulgas kõiki arendusprotsesse, mida rakendatakse projekti kui tervikuga võrreldes väiksemate funktsionaalsuste loomiseks. Iga iteratsiooni eesmärk on hankida tarkvarasüsteemi tööversioon, sealhulgas kõigi eelmiste ja praeguste iteratsioonide integreeritud sisuga määratletud funktsionaalsus. Lõpliku iteratsiooni tulemus sisaldab toote kõiki vajalikke funktsioone. Seega saab toode iga iteratsiooni lõpuleviimisel oma võimete juurdekasvu – tõusu –, mis seetõttu arenevad evolutsiooniliselt.


Enamikus kaasaegsetes arendusmetoodikates rakendatakse iteratiivse lähenemise erinevaid variante:

Arendusprotsess – Rational Unified Process (RUP)

Rational Unified Process (RUP)(ratsionaalne ühtne protsess) on tarkvaraarenduse metoodika, mida haldab Rational Software (IBM). Metoodika annab soovitusi kõikideks arendusetappideks: ärimudelist kuni valmis programmi testimise ja kasutuselevõtuni. Modelleerimiskeelena kasutatakse ühtset modelleerimiskeelt (UML).
Kogu tootearenduse elutsükkel koosneb neljast faasist, millest igaüks sisaldab ühte või mitut iteratsiooni.

  • Esialgne etapp (algatus)
  • Projekti ulatuse ja vajalike ressursside mahu määramine. Määratakse kindlaks toote põhinõuded, piirangud ja põhifunktsioonid. Riske hinnatakse. Tegevuse planeerimine. Algfaasi lõpus hinnatakse elutsükli eesmärgi verstaposti saavutamist, mis eeldab sidusrühmade vahelist kokkulepet projekti jätkamiseks.

  • Selgitamine
  • Nõuded dokumenteerimisele. Käivitatava arhitektuuri projekteerimine, juurutamine ja testimine. Tingimuste ja kulude täpsustamine. Peamiste riskide vähendamine. Arendusfaasi edukas läbimine tähendab elutsükli arhitektuuri verstapostini jõudmist.

  • Ehitus
  • “Ehitamise” faasis realiseeritakse suurem osa toote funktsionaalsusest: valmib rakenduse disain, kirjutatakse lähtekood. Ehitamise etapp lõpeb süsteemi esimese välise väljalaskega ja esialgse töövõime verstapostiga.

  • Sissejuhatus
  • „Kasutuselevõtmise“ faasis luuakse toote lõplik versioon, mis edastatakse arendajalt kliendile. See hõlmab beetatestimise programmi, kasutajakoolitust ja toote kvaliteedi määramist. Juhul, kui kvaliteet ei vasta kasutaja ootustele või Stardifaasis seatud kriteeriumidele, korratakse juurutamisetappi uuesti. Kõigi eesmärkide täitmine tähendab toote väljalaske verstaposti saavutamist ja kogu arendustsükli lõpetamist.



"Infotehnoloogia. Süsteemi- ja tarkvaratehnika. Tarkvara elutsükli protsessid". Selle standardi võttis vastu Venemaa Föderatsiooni Tehniliste eeskirjade ja Metroloogia Föderaalne Amet ja see on sarnane rahvusvahelisele standardile ISO/IEC 12207:2008. See standard kehtestab tarkvara elutsükli protsesside üldise struktuuri, mida saab tarkvaratööstuses järgida. Standard ei paku konkreetset olelustsükli mudelit. Selle sätted on ühised kõigi tarkvara loomise olelustsükli mudelite, meetodite ja tehnoloogiate jaoks. See kirjeldab elutsükli protsesside struktuuri, täpsustamata, kuidas nendes protsessides sisalduvaid tegevusi ja ülesandeid rakendada või lõpule viia.

Tunni esitlus
Sõnumite teemad
  • Vaba Tarkvara Fond (FSF)
  • Tasuta tarkvara litsentsid
  • Tasuta tarkvara ja avatud lähtekoodiga
  • Programmeerimiskeelte arengu ajalugu
  • C keele ajalugu C ja C++
  • Lugu
  • C++ kriitika
  • UNIX-i ajalugu
  • Spiraalne tarkvara elutsükli mudel
  • UML (Unified Modeling Language)
  • Microsofti lahenduste raamistik
  • IDE C/C++ programmeerimiseks Windowsis
  • C/C++ kompilaatorid
  • Konsoolirakenduse loomine Windowsis
Küsimused
  1. Miks ei kasutata suurtes projektides tarkvaraarenduse kosemudelit?
  2. Mis vahe on juga ja iteratiivse arengumudeli vahel?
  3. Loetlege tarkvaraarenduse etapid Rational Unified Process (RUP) metoodikas

Loomise ajalugu

Keel sai alguse 1980. aastate alguses, kui Bell Labsi töötaja Björn Stroustrup pakkus oma vajadusteks välja mitmeid C-keele täiustusi. Kui Stroustrup asus 1970. aastate lõpus Bell Labsis töötama järjekorrateooria probleemidega (nagu seda kasutati telefonikõnede modelleerimisel), leidis ta, et katsed kasutada tol ajal olemasolevaid modelleerimiskeeli olid ebatõhusad ja väga tõhusate masinkeelte kasutamine. oli nende piiratud väljendusvõime jaoks liiga raske teostada. Seega on Simula keelel funktsioonid, mis oleksid suure tarkvara arendamiseks väga kasulikud, kuid on liiga aeglased ning BCPL-keel on piisavalt kiire, kuid on liiga lähedane madala tasemega keeltele ega sobi suure tarkvara arendamiseks.

Lõputöö kogemust meenutades otsustas Stroustrup täiendada C-keelt (BCPL-i järglane) Simula keeles saadaolevate võimalustega. C, mis on UNIX-süsteemi baaskeel, millel Belli arvutid töötasid, on kiire, funktsioonirikas ja kaasaskantav. Stroustrup lisas oskuse töötada klasside ja objektidega. Selle tulemusena osutusid praktilised modelleerimisülesanded lihtsasti lahendatavaks nii arendusaja (tänu Simula-laadsete klasside kasutamisele) kui ka arvutusaja osas (tänu C kiirusele). Esiteks lisati C-le klassid (koos kapseldamisega), klassi pärimine, tugev tüübikontroll, tekstisisesed funktsioonid ja vaikeargumendid. Keele varased versioonid, algselt nimega "C with classes", said kättesaadavaks 1980. aastal.

Klassidega C-d arendades kirjutas Stroustrup programmi nimega cfront – tõlkija, mis teisendab klassidega C lähtekoodi lihtsaks C-lähtekoodiks. See võimaldas töötada uue keele kallal ja seda praktikas kasutada, kasutades juba aastal olemasolevat infrastruktuuri. UNIX C-keele arendamiseks. Autorile ootamatult saavutas ta uue keele oma kolleegide seas suure populaarsuse ja peagi ei saanud Stroustrup teda enam isiklikult toetada, vastates tuhandetele küsimustele.

C++ loomisel soovis Björn Stroustrup
  • Hankige staatiliste andmetüüpidega üldkasutatav keel, C-keele tõhusus ja kaasaskantavus.
  • Toetab otseselt ja igakülgselt erinevaid programmeerimisstiile, sealhulgas protseduurilist programmeerimist, andmete abstraktsiooni, objektorienteeritud programmeerimist ja üldist programmeerimist.
  • Andke programmeerijale valikuvabadus, isegi kui see annab talle võimaluse valesti valida.
  • Säilitage nii palju kui võimalik ühilduvus C-ga, muutes seeläbi võimalikuks lihtsa ülemineku C-programmeerimiselt.
  • Vältige lahknevusi C ja C++ vahel: iga konstruktsioon, mis kehtib mõlemas keeles, peab tähendama mõlemas keeles sama asja ja viima programmi sama käitumiseni.
  • Vältige funktsioone, mis sõltuvad platvormist või ei ole universaalsed.
  • "Ära maksa selle eest, mida te ei kasuta" – ükski keelefunktsioon ei tohiks põhjustada nende programmide jõudluse halvenemist, mis seda ei kasuta.
  • Ärge vajage liiga keerulist programmeerimiskeskkonda.

C-i valimine uue programmeerimiskeele loomise aluseks on seletatav asjaoluga, et C-keel:

1. on mitmeotstarbeline, sisutihe ja suhteliselt madala tasemega keel;
2. sobib enamiku süsteemiprobleemide lahendamiseks;
3. esitatakse kõikjal ja kõigel;
4. liidesed UNIX programmeerimiskeskkonnaga.

— B. Stroustrup. C++ programmeerimiskeel. Punkt 1.6

Vaatamata mitmetele C-keele teadaolevatele puudustele otsustas Stroustrup selle aluseks võtta, kuna "C-l on oma probleemid, kuid nullist arendatud keeles on need olemas ja me teame C-ga seotud probleeme." Lisaks võimaldas see kiiresti hankida prototüübi kompilaatori (cfront), mis tõlkis ainult lisatud süntaktilised elemendid algsesse C-keelde.

C++ arenedes lisati ka muid funktsioone, mis katsid C-konstruktsioonide võimalusi ja seetõttu tõstatati korduvalt küsimus keele ühilduvusest loobumise kohta, eemaldades vananenud konstruktsioonid. Ühilduvus on aga säilinud järgmistel põhjustel:

  • praeguse koodi säilitamine, mis on algselt kirjutatud C-keeles ja otse üle kantud C++-i;
  • kaob vajadus varem C-d õppinud programmeerijaid ümber õpetada (neil on vaja ainult uusi C++ tööriistu õppida);
  • keeltevahelise segaduse kõrvaldamine koos kasutamisel ("kui kahte keelt kasutatakse koos, peaksid nende erinevused olema minimaalsed või nii suured, et keeli on võimatu segi ajada").

1983. aastaks oli keelde lisatud uusi funktsioone, nagu virtuaalsed funktsioonid, funktsioonide ja operaatorite ülekoormus, viited, konstandid, kasutaja kontroll vaba mälu haldamise üle, täiustatud tüübikontroll ja uus kommentaaristiil (//). Saadud keel ei olnud enam lihtsalt klassikalise C täiustatud versioon ja see nimetati C-st koos klassidega ümber C++-ks. Selle esimene kommertslik väljalase toimus 1985. aasta oktoobris.

Saadud keelenimi pärineb C++ unary postfix inkrement operaatorist (suurendades muutuja väärtust ühe võrra).

Enne ametliku standardimise algust töötas selle keele välja peamiselt Stroustrup vastuseks programmeerimiskogukonna taotlustele. Keele standardkirjelduste funktsiooni täitsid Stroustrupi kirjutatud C++ peal trükitud teosed (keelekirjeldus, teatmik jne).

Standardite ajalugu

1985. aastal ilmus C++ programmeerimiskeele esimene väljaanne, mis andis esimese keele kirjelduse, mis oli ametliku standardi puudumise tõttu äärmiselt oluline.


1989. aastal anti välja C++ versioon 2.0. Selle uued funktsioonid hõlmasid mitut pärandit, abstraktseid klasse, staatilisi liikmefunktsioone, püsifunktsioone ja kaitstud liikmeid. 1990. aastal ilmus “Annotated Reference Guide to C++”, mis sai hiljem standardi aluseks. Hiljutised värskendused on hõlmanud malle, erandeid, nimeruume, uut tüüpi ülekandmist ja tõeväärtuse tüüpi.

Koos sellega arenes välja ka C++ Standard Library. C++ standardteegi esimene täiendus oli I/O vood, mis pakuvad vahendit traditsiooniliste C printf ja scanf funktsioonide asendamiseks. Hiljem oli standardteegi olulisim arendus standardmalliteegi kaasamine.

1998. aastal avaldati keelestandard ISO/IEC 14882:1998 (tuntud kui C++98), mille töötas välja C++ standardikomitee (ISO/IEC JTC1/SC22/WG21 töörühm). C++ standard ei kirjelda objektide nimetamist, mõningaid erandite käsitlemise üksikasju ega muid juurutamise üksikasju, mis muudab erinevate kompilaatorite toodetud objektikoodi ühildumatuks. Paljud standardid on aga konkreetsete arhitektuuride ja operatsioonisüsteemide jaoks loonud kolmandad osapooled.

2005. aastal ilmus raamatukogu tehniline aruanne 1 (lühendatult TR1). Kuigi aruanne ei ole ametlikult standardi osa, kirjeldab aruanne standardteegi laiendusi, mida autorid eeldasid C++ keele järgmisse versiooni. TR1 tugi paraneb peaaegu kõigis toetatud C++ kompilaatorites.

Alates 2009. aastast on tegeldud eelmise standardi uuendamisega, uue standardi eelversioon oli esmalt C++09 ja aasta hiljem C++0x, täna C++11, mis sisaldas täiendusi põhituumikusse. keel ja standardteegi laiendus, sealhulgas suurem osa TR1-st.

C++ areneb jätkuvalt, et vastata tänapäeva nõuetele. Üks C++ keelt arendav ja C++ standardimiskomisjonile selle täiustamisettepanekuid esitav grupp on Boost, mis tegeleb muuhulgas ka keele võimaluste parandamisega, lisades sellele metaprogrammeerimisvõimalusi.

Kellelgi pole õigusi C++ keelele, see on tasuta. Keelestandarddokument ise (v.a mustandid) aga tasuta saadaval ei ole.

Kui teie maine töötab teie kasumi nimel

Kogukonna juhtimine

Häältooni loomine. Nii negatiivsete kui ka positiivsete kommentaaride kiire töötlemine brändi nimel. Sidehaldus vastavalt kindlaksmääratud stsenaariumidele. Probleemsete küsimuste tõlkimine kliendile.

Mõjuagendid

"Virtuaalide" loomine ja juurutamine foorumites ja sotsiaalvõrgustikes. Rohkem kui 300 saidil on täiendatud ja aktiivsete kontode andmebaas.

Töö ülevaadetega

Brändi kohta arvustuste kirjutamine, koordineerimine ja postitamine tippplatvormidel ja arvustuste saitidel. Negatiivsete kommentaaride töötlemine ja katmine positiivsetega. Selle tulemusena surutakse negatiivsus järk-järgult otsingutulemustest välja.

Sotsiaalmeedia jälgimine

Töö Youscani, IQbuzzi, Brand Analyticsi süsteemidega. Brändi mainimiste kontroll. Peamiste arusaamade tuvastamine ja negatiivsusele viivitamatu reageerimine. Asendamatu tööriist klientide tagasiside jälgimiseks.

Analüütika ja uuringud

Infovälja analüüs, tootekategooria ja brändi peamiste konkurentide uurimine. See tööriist hõlmab ülesandeid alates maine jälgimisest ja reaalajas turundusest kuni põhjaliku uurimiseni.

SERM

Valitud märksõnade otsingutulemuste üksikasjalik analüüs. Kliendi kohta viidete kogumine sotsiaalvõrgustikes, foorumites ja uudistesaitidel. Negatiivse teabega tegelemise strateegia väljatöötamine. Klient saab TOP10-s täielikult kontrollitud tarne.