Contacte

§1 Informaţii generale despre limbă. Etapele proiectării programului. Modele de ciclu de viață al aplicațiilor. Istoria limbajului C Când a fost creat limbajul cu

Limbajul de programare C++

Ultima actualizare: 28.08.2017

Limbajul de programare C++ este un limbaj de programare compilat de nivel înalt, tip static, de uz general, care este potrivit pentru construirea unei game largi de aplicații. Astăzi, C++ este unul dintre cele mai populare și răspândite limbaje.

Își are rădăcinile în limbajul C, care a fost dezvoltat în 1969-1973 la Bell Labs de către programatorul Dennis Ritchie. La începutul anilor 1980, programatorul danez Bjarne Stroustrup, care se afla în acel moment la Bell Labs, a dezvoltat C++ ca o extensie a limbajului C. De fapt, la început, C++ a completat pur și simplu limbajul C cu unele capacități de programare orientate pe obiecte. Și astfel, Stroustrup însuși s-a referit inițial la el drept „C cu clase”.

Ulterior, noua limbă a început să câștige popularitate. I s-au adăugat noi caracteristici, ceea ce l-a făcut nu doar o completare la C, ci un limbaj de programare complet nou. Ca rezultat, „C cu clase” a fost redenumit C++. Și de atunci, ambele limbi au început să se dezvolte independent una de cealaltă.

C++ este un limbaj puternic, care moștenește capacități bogate de memorie de la C. Prin urmare, C ++ își găsește adesea aplicația în programarea sistemului, în special, atunci când creează sisteme de operare, drivere, diverse utilități, antivirusuri etc. Apropo, Windows este scris în mare parte în C++. Dar utilizarea acestui limbaj nu se limitează doar la programarea sistemului. C++ poate fi folosit în programe de orice nivel în care viteza și performanța sunt importante. Este adesea folosit pentru a crea aplicații grafice, diverse programe de aplicație. De asemenea, este adesea folosit pentru a crea jocuri cu vizualizare bogată. În plus, recent direcția mobilă a luat amploare, unde și-a găsit aplicația și C++. Și chiar și în dezvoltarea web este posibil să se folosească C ++ pentru a crea aplicații web sau un fel de servicii de ajutor care servesc aplicații web. În general, C++ este un limbaj utilizat pe scară largă în care puteți crea aproape orice fel de program.

C++ este un limbaj compilat, ceea ce înseamnă că compilatorul traduce codul sursă C++ într-un fișier executabil care conține un set de instrucțiuni ale mașinii. Dar diferitele platforme au propriile lor caracteristici, astfel încât programele compilate nu pot fi pur și simplu transferate de la o platformă la alta și rulează acolo. Cu toate acestea, la nivel de cod sursă, programele C++ sunt în mare parte portabile, cu excepția cazului în care sunt utilizate unele funcții specifice sistemului de operare actual. Și prezența compilatoarelor, bibliotecilor și instrumentelor de dezvoltare pentru aproape toate platformele obișnuite vă permite să compilați același cod sursă C ++ în aplicații pentru aceste platforme.

Spre deosebire de C, limbajul C++ vă permite să scrieți aplicații într-un stil orientat pe obiecte, reprezentând un program ca o colecție de clase și obiecte care interacționează. Acest lucru facilitează crearea de aplicații mari.

Principalele etape de dezvoltare

În 1979-80, Bjarne Stroustrup a dezvoltat o extensie a limbajului C - „C cu clase”. În 1983 limbajul a fost redenumit C++.

În 1985, a fost lansată prima versiune comercială a limbajului C++, precum și prima ediție a cărții „The C++ Programming Language”, care a oferit prima descriere a acestui limbaj în absența unui standard oficial.

În 1989, a fost lansată o nouă versiune a limbajului C++ 2.0, care includea o serie de caracteristici noi. După aceea, limba sa dezvoltat relativ lent până în 2011. Dar, în același timp, în 1998, a fost făcută prima încercare de standardizare a limbajului de către ISO (International Organization for Standardization). Primul standard a fost numit ISO / IEC 14882: 1998, sau C++ 98 pe scurt. Mai târziu, în 2003, a fost publicată o nouă versiune a standardului C++ 03.

În 2011, a fost publicat noul standard C++ 11, care conținea multe completări și îmbogățise limbajul C++ cu un număr mare de funcționalități noi. După aceea, în 2014, a fost lansată o mică completare la standard, cunoscută și sub numele de C++ 14. Și o altă lansare cheie a limbii este programată pentru 2017.

Compilatoare și medii de dezvoltare

Pentru a dezvolta programe C ++, aveți nevoie de un compilator - acesta traduce codul sursă C ++ într-un fișier executabil, pe care apoi îl puteți rula. Dar în acest moment există multe compilatoare diferite. Ele pot diferi în diferite aspecte, în special în implementarea standardelor. O listă de bază de compilatoare pentru C++ poate fi găsită pe Wikipedia. Se recomandă pentru dezvoltare să aleagă acele compilatoare care dezvoltă și implementează toate cele mai recente standarde. Astfel, pe tot parcursul acestui tutorial, va fi folosit în primul rând compilatorul gratuit g ++ dezvoltat de Proiectul GNU.

De asemenea, puteți utiliza IDE-uri precum Visual Studio, Netbeans, Eclipse, Qt etc. pentru a crea programe.

C și UNIX

Limbaj de programare CU(a se citi „C”) a fost creat la începutul anilor ’70, când Ken Thompson și Dennis Ritchie de la Bell Labs dezvoltau sistemul de operare UNDC. Mai întâi au creat partea compilatorului CU, apoi l-a folosit pentru a compila restul compilatorului CUși în cele din urmă a aplicat compilatorul rezultat pentru a compila UNIX. Sistemul de operare UNIX a fost distribuit inițial în codul sursă pe CUîntre universități și laboratoare, iar destinatarul ar putea compila codul sursă în limbaj CUîn codul mașinii cu un compilator adecvat CU.

Distribuția codului sursă a făcut sistemul de operare UNIX unic; programatorul ar putea schimba sistemul de operare, iar codul sursă ar putea fi portat de la o platformă hardware la alta. Astăzi, standardul POSIX definește un set standard de apeluri de sistem UNIX disponibile în CU să fie implementat pe versiunile UNIX care sunt compatibile cu POSIX. C a fost a treia limbă dezvoltată de Thomson și Ritchie în timpul creării UNIX; primele două au fost, desigur, Ași V.

C limbaj de asamblare mobil

Comparativ cu limba anterioară - BCPL, limba CU a fost îmbunătățit prin adăugarea de tipuri de date de lungimi specifice. De exemplu, tipul de date int ar putea fi folosit pentru a crea o variabilă cu un anumit număr de biți (de obicei 16), în timp ce tipul de date lung ar putea fi folosit pentru a crea o variabilă întreagă cu un număr mare de biți (de obicei 32). Spre deosebire de alte limbi de nivel înalt, CU ar putea lucra cu adrese de memorie direct folosind pointeri și referințe. În măsura în care CUși-a păstrat capacitatea de a accesa direct hardware-ul, este adesea menționat ca un limbaj de nivel mediu sau este denumit în glumă „limbaj de asamblare mobil”.

С - limbaj de programare structurat

În ceea ce privește gramatică și sintaxă, atunci CU este un limbaj de programare structurat. În timp ce mulți programatori moderni gândesc în termeni de clase și obiecte, programatorii în CU gândiți în termeni de proceduri și funcții. V CU vă puteți defini propriile tipuri de date abstracte folosind cuvântul cheie struct. În mod similar, puteți descrie propriile tipuri de numere întregi (enumerări) și puteți da alte nume tipurilor de date existente folosind cuvântul cheie typedef. In acest sens CU este un limbaj structurat cu semințele programării orientate pe obiecte.

Standardizarea limbajului C

Utilizarea pe scară largă a limbii C pe diferite tipuri de computere (numite uneori platforme hardware) a condus, din păcate, la multe variații ale limbajului. Erau asemănători, dar incompatibili unul cu celălalt. Aceasta a fost o problemă majoră pentru dezvoltatorii de software care aveau nevoie să scrie programe compatibile care să poată rula pe mai multe platforme. A devenit clar că era nevoie de o versiune standard C... În 1983. ANSI (American National Standards Committee) a format un comitet tehnic X3J11 pentru a crea un standard lingvistic C(pentru a „oferi o definiție clară și independentă de mașină a limbajului”). În 1989 standardul a fost aprobat. ANSI a încheiat un parteneriat cu ISO (International Standards Organization) pentru standardizare C pe plan internațional; un standard comun a fost publicat în 1990 și numit ANSI / ISO 9899: 1990. Acest standard este încă în curs de îmbunătățire și este susținut de majoritatea companiilor de dezvoltare a compilatoarelor.

Nașterea lui C++

Björn Stroustrup a dezlănțuit potențialul orientat pe obiecte CU prin transferul capacităţilor claselor Simula 67 v CU... Inițial, noua limbă a purtat numele „C cu clase” și abia apoi a început să fie numită C++... Limba C++ A atins popularitate atunci când a fost dezvoltat la Bell Labs, iar mai târziu a fost transferat în alte industrii și corporații. Astăzi este unul dintre cele mai populare (și respectate) limbaje de programare din lume. C++ moștenește atât părțile bune, cât și părțile rele CU.

Dezvăluirile lui Bjorn Stroustrup

Bjorn Stroustrup: „Am venit cu C++, și-a notat definiția inițială și a făcut prima implementare. Am ales și formulat criterii de proiectare C++, și-a dezvoltat principalele caracteristici și a fost responsabil de soarta propunerilor de extindere a limbii în comitetul de standardizare C++", - scrie autorul celui mai popular limbaj de programare. -" Limbajul C++ datorează mult limbii C, și limba C rămâne un subset limbajul C++(dar C ++ remediază câteva defecte majore în sistemul de tip C). Am economisit și fonduri C care sunt suficient de scăzute pentru a face față celor mai critice sarcini ale sistemului. Limba C datorează mult predecesorului său, BCPL; apropo, stilul de comentariu // a fost preluat C++ de la BCPL. Limba a fost o altă sursă majoră de inspirație. Simula67... Conceptul de clase (cu clase derivate și funcții virtuale) a fost împrumutat de la acesta. Mijloacele de supraîncărcare a operatorilor și capacitatea de a plasa anunțuri oriunde unde poate fi scrisă o instrucțiune reamintește Algol68. "

De ce C++

Nume C++ inventat de Rick Massitti. Numele indică natura evolutivă a trecerii la acesta de la C... „++” este o operație de creștere în C... Nume puțin mai scurt C + este o eroare de sintaxă; în plus, a fost deja folosită ca denumire a unei limbi complet diferite. Cunoscători de semantică C găsește asta C++ mai rau decat ++ C... Nume D limbajul nu a primit-o, deoarece este o extensie a lui C și nu încearcă să remedieze problemele aruncând diverse caracteristici.

De ce a fost nevoie de C++

Inițial Limbajul de programare C++ a fost conceput astfel încât autorul și prietenii săi să nu fie nevoiți să programeze în asamblare, C sau alte limbaje moderne de nivel înalt. Scopul său principal a fost de a face scrierea unor programe bune mai ușoară și mai plăcută pentru programatorul individual. Plan de dezvoltare C++ nu a fost niciodată pe hârtie; proiectarea, documentarea și implementarea s-au mutat în același timp. Desigur, interfața externă C++ a fost scris în C++... Proiectul C++ și Comitetul de Dezvoltare C++ nu au existat niciodată. Asa de C++ a evoluat și continuă să evolueze în toate direcțiile pentru a face față complexităților cu care se confruntă utilizatorii, precum și în cursul discuțiilor dintre autor și prietenii și colegii săi.

Real Object Orientat C++

V limbajul C++ principiile programării orientate pe obiecte sunt pe deplin susținute, inclusiv cei trei piloni pe care se sprijină: încapsularea, moștenirea și polimorfismul. Încapsularea în C++ sprijinit prin crearea de tipuri de date non-standard (personalizate) numite clase. Limba C++ susține moștenirea. Aceasta înseamnă că puteți declara un nou tip de date (clasă), care este o extensie a celui existent.

Deşi Limbajul de programare C++ pe bună dreptate numită continuare CUși orice program funcțional în limbaj CU va fi suportat de compilator C++, când mergi de la CU La C++ s-a făcut un salt foarte semnificativ. Limba C++ a beneficiat de afinitatea sa cu limba CU de-a lungul anilor, la fel de mulți programatori au constatat că pentru a profita la maximum de beneficii limbajul C++, trebuie să renunțe la unele dintre cunoștințele anterioare și să dobândească altele noi și anume: să învețe un nou mod de conceptualizare și de rezolvare a problemelor de programare. Înainte de a începe să stăpânești C++, Stroustrup și majoritatea celorlalți programatori care folosesc C++ luați în considerare învățarea limbilor străine CU opțional.

Limbaj de programare C++ considerat în prezent limbajul dominant folosit pentru dezvoltarea produselor comerciale, 90% dintre jocuri sunt scrise în C++ folosind DirectX.

Literatură

Surse:

  • H.M.Deitel, P.J.Deitel „Cum se programează în C++”
  • Bjarne Stroustrup "Limbajul de programare C++. Ediția a 3-a."
  • Simon Robinson, Ollie Cornes, Jay Glynn și colab. „C # for Professionals”
  • Jess Liberty „Învățați C++ pe cont propriu în 21 de zile”
  • Stanislav Gornakov „Lecții de programare DirectX, C++”

C ++ (citește C-plus-plus) este un limbaj de programare general compilat, tipizat static, în care puteți crea programe de orice complexitate.
De mai bine de 20 de ani, acest limbaj se află în primele trei limbaje de programare cele mai populare și solicitate. (Puteți verifica acest lucru vizitând site-ul web TIOBE).
Limbajul a apărut la începutul anilor 1980, când angajatul Bell Labs, Björn Stroustrup, a venit cu o serie de îmbunătățiri ale limbajului C pentru a se potrivi propriilor nevoi.

Bjarne Stroustrup - creatorul limbajului C++

Stroustrup a decis să completeze limbajul C cu capacitățile limbajului Simula. C, ca limbaj de bază al sistemului UNIX pe care rulau computerele Bell, este rapid, bogat în funcții și portabil. Stroustrup a adăugat capacitatea de a lucra cu clase și obiecte. Ca urmare, problemele practice de modelare s-au dovedit a fi disponibile pentru rezolvare atât în ​​ceea ce privește timpul de dezvoltare (mulțumită utilizării claselor similare Simula), cât și în ceea ce privește timpul de calcul (mulțumită vitezei lui C).
Iată cum spune însuși dezvoltatorul de limbaj despre asta:



În 1998, primul standard de limbă, cunoscut sub numele de C++ 98, a fost publicat de un comitet pentru standardizare. C++ continuă să evolueze pentru a satisface cerințele moderne. Unul dintre grupurile care dezvoltă limbajul C++ și trimit sugestii pentru îmbunătățirea acestuia către Comitetul de standardizare C++ este Boost, care se angajează, printre altele, în îmbunătățirea capacităților limbajului prin adăugarea de caracteristici de metaprogramare. Ultimul standard a fost lansat în 2017 și se numește C++ 17... Următorul standard nu va întârzia să apară și va apărea așa cum era de așteptat în 2020.
Nimeni nu deține drepturile asupra limbajului C++, este gratuit. În martie 2016, în Rusia a fost creat un grup de lucru WG21 C++. Grupul a fost organizat pentru a colecta propuneri pentru standardul C++, a le trimite comitetului și a le apăra la adunările generale ale Organizației Internaționale pentru Standardizare.
C++ este un limbaj cu mai multe paradigme (de la cuvântul paradigmă - stilul de a scrie programe de calculator), care include o gamă largă de stiluri și tehnologii diferite de programare. Este adesea menționat ca un limbaj orientat pe obiecte, dar strict vorbind nu este. În procesul de lucru, dezvoltatorul câștigă libertate absolută în alegerea instrumentelor, astfel încât problema rezolvată folosind una sau cutare abordare să fie rezolvată cât mai eficient posibil. Cu alte cuvinte, C++ nu forțează programatorul să respecte un singur stil de dezvoltare a programului (de exemplu, orientat pe obiecte).
C ++ are o bibliotecă standard bogată care include containere și algoritmi obișnuiți, I/O, expresii regulate, suport multithreading și multe altele. C++ a influențat multe limbaje de programare, printre care: Java, C#, D. Deoarece C++ aparține familiei de limbaje bazate pe sintaxa limbajului C, puteți stăpâni cu ușurință alte limbaje de programare din această familie. : JavaScript, PHP, Perl, Objective-C și multe altele... altele, inclusiv limba parentală în sine - C. ()
În timpul existenței sale, limbajul C++ a înrădăcinat mituri stabile care sunt ușor de infirmat (vezi aici: Partea 1 și Partea 2)

Istoria limbii și eliberarea standardelor

1983

Creatorul limbii - Bjorn Stroustrup, angajatul Bell Labs, a introdus o versiune timpurie a C++ („C cu clase”)

1985

Prima lansare comercială a C++, limba își capătă numele modern

1986

Prima ediție a limbajului de programare C++, o carte despre C++ scrisă de Björn Stroustrup

1998

Ratificat standardul internațional pentru limbajul C++: ISO / IEC 14882: 1998 „Standard pentru limbajul de programare C++”

2003
2005

Raportul tehnic al bibliotecii 1 (TR1) a fost lansat. Deși nu face parte oficial din standard, raportul a descris extensii ale bibliotecii standard care ar trebui incluse în următoarea versiune a limbajului C++.

2011

Lansarea unui nou standard - C++ 11 sau ISO / IEC 14882: 2011; noul standard a inclus completări la nucleul limbajului și o extensie a bibliotecii standard, inclusiv cea mai mare parte a TR1

2014

Lansarea standardului C++ 14 („Standard internațional ISO / IEC 14882: 2014 (E) Limbajul de programare C++”); C++ 14 poate fi considerat ca o mică extensie peste C++ 11, care conține în mare parte remedieri de erori și îmbunătățiri minore

2017

Noul standard lansat - C ++ 1z (C ++ 17). Acest standard a introdus multe modificări și completări. De exemplu, STD include biblioteci ale standardului C11, un sistem de fișiere bazat pe sistemul de fișiere boost ::, cea mai mare parte a bibliotecii experimentale TS I.

2020

C ++ 20 este numele neoficial pentru standardul ISO / IEC pentru limbajul de programare C ++, care este de așteptat după C ++ 17. Schiță a standardului N4800.

Filosofia C++

În The Design and Evolution of C ++ (2007), Björne Stroustrup descrie principiile pe care le-a urmat în proiectarea C ++ (abreviat):

  • Obțineți un limbaj generic cu tipuri de date statice, eficiență și portabilitatea limbajului C.
  • Suportă multe stiluri de programare direct și cuprinzător.
  • Oferă programatorului libertatea de a alege, chiar dacă îi oferă posibilitatea să aleagă pe cel greșit.
  • Mențineți compatibilitatea cu C cât mai mult posibil, făcând astfel posibilă o tranziție ușoară de la programarea C.
  • Evitați confuzia între C și C++: orice construct permis în ambele limbi trebuie să însemne același lucru în fiecare dintre ele și să conducă la același comportament al programului.
  • Evitați funcțiile care depind de platformă sau nu sunt generice.
  • Nu plătiți pentru ceea ce nu este folosit - niciun instrument de limbaj nu ar trebui să degradeze performanța programelor care nu îl folosesc.
  • Nu aveți nevoie de un mediu de programare prea complicat.

C și C++

Sintaxa lui C ++ este moștenită din limbajul C. Deși, formal, unul dintre principiile lui C ++ rămâne păstrarea compatibilității cu limbajul C, de fapt, grupurile pentru standardizarea acestor limbaje nu interacționează, iar schimbările pe care le fac nu numai că nu se corelează, dar adesea se contrazic fundamental reciproc din punct de vedere ideologic. De exemplu, elementele pe care noile standarde C le adaugă la nucleu sunt elemente ale bibliotecii standard din standardul C++ și sunt complet absente în nucleu, de exemplu, matrice dinamice, matrice cu granițe fixe, facilități de procesare paralelă. Ar fi foarte benefic să combinați dezvoltarea celor două limbi, a spus Stroustrup, dar este puțin probabil să fie fezabil din punct de vedere politic. Deci compatibilitatea practică între C și C++ se va pierde treptat.
În acest exemplu, în funcție de compilatorul folosit, va scoate fie „C++” fie „C”:

Programul 9.1

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

Acest lucru se datorează faptului că constantele de caractere în C sunt de tip int, iar în C ++ sunt de tip char, dar dimensiunile acestor tipuri sunt diferite.

Modele de ciclu de viață al aplicațiilor

Ciclu de viață software-ul este o perioadă de timp care începe din momentul în care se ia o decizie cu privire la necesitatea creării unui produs software și se termină în momentul retragerii complete a acestuia. Acest ciclu este procesul de construire și dezvoltare de software (software). Există mai multe modele de ciclu de viață.
Model în cascadă ciclul de viață (ing. model cascadă) a fost propus în 1970 de Winston Royce. Acesta prevede execuția secvențială a tuturor etapelor proiectului într-o ordine strict fixă. Trecerea la etapa următoare înseamnă finalizarea completă a lucrării în etapa anterioară. Cerințele, determinate în stadiul formării cerințelor, sunt strict documentate sub formă de specificații tehnice și sunt fixate pentru întreaga perioadă de dezvoltare a proiectului. Fiecare etapă se încheie cu lansarea unui set complet de documentație suficientă pentru ca dezvoltarea să fie continuată de o altă echipă de dezvoltare.
Etapele proiectului conform modelului cascada:

  1. Formarea cerințelor;
  2. Proiecta;
  3. Implementare;
  4. Testare;
  5. Implementare;
  6. Operare și întreținere.

Într-un model în cascadă, trecerea de la o fază a proiectului la alta presupune corectitudinea completă a rezultatului fazei anterioare. În proiectele mari, acest lucru este aproape imposibil de realizat. Prin urmare, acest model este potrivit doar pentru dezvoltarea unui proiect mic. (W. Royce însuși nu a aderat la acest model și a folosit un model iterativ).
Model iterativ
O alternativă la modelul cascadă este modelul de dezvoltare iterativă și incrementală (IID) obținut de la T. Gilb în anii 70. denumirea modelului evolutiv. Modelul IID presupune ruperea ciclului de viață al proiectului într-o serie de iterații, fiecare dintre ele seamănă cu un „mini-proiect”, incluzând toate procesele de dezvoltare aplicate la crearea unor piese mai mici de funcționalitate, în comparație cu proiectul în ansamblu. Scopul fiecărei iterații este de a obține o versiune de lucru a sistemului software care să includă funcționalitatea definită de conținutul integrat al tuturor iterațiilor anterioare și actuale. Rezultatul iterației finale conține toată funcționalitatea necesară a produsului. Astfel, odată cu finalizarea fiecărei iterații, produsul primește un increment - un increment - la capacitățile sale, care, prin urmare, se dezvoltă evolutiv.


În majoritatea metodologiilor moderne de dezvoltare sunt implementate diferite versiuni ale abordării iterative:

Proces de dezvoltare - Proces Rational Unified (RUP)

Proces rațional unificat (RUP)(Lean Unified Process) este o metodologie de dezvoltare software susținută de Rational Software (IBM). Metodologia oferă recomandări pentru toate etapele de dezvoltare: de la modelarea afacerii până la testarea și punerea în funcțiune a programului finalizat. Limbajul de modelare unificat (UML) este folosit ca limbaj de modelare.
Ciclul de viață complet al dezvoltării produsului constă din patru faze, fiecare dintre acestea incluzând una sau mai multe iterații.

  • Etapa inițială (începerea)
  • Determinați sfera proiectului și cantitatea de resurse necesare. Sunt identificate cerințele de bază, limitările și funcționalitatea cheie a produsului. Riscurile sunt evaluate. Planificarea actiunii. La sfârșitul fazei inițiale, se evaluează atingerea Obiectivului Ciclului de Viață, care presupune un acord între părțile interesate privind continuarea proiectului.

  • Elaborare
  • Cerințe de documentare. Proiectarea, implementarea și testarea unei arhitecturi executabile. Clarificarea termenilor și a costurilor. Reducerea riscurilor majore. Finalizarea cu succes a fazei de dezvoltare înseamnă atingerea etapei de referință pentru arhitectura ciclului de viață.

  • Constructie
  • În faza „Build”, majoritatea funcționalității produsului este implementată: designul aplicației este complet, codul sursă este scris. Faza de construire se încheie cu prima lansare externă a sistemului și cu o etapă a capacității operaționale inițiale.

  • Tranziție
  • În faza de „Implementare”, versiunea finală a produsului este creată și transferată de la dezvoltator la client. Aceasta include un program de testare beta, instruire pentru utilizatori și determinarea calității produsului. Daca calitatea nu corespunde asteptarilor utilizatorilor sau criteriilor stabilite in faza de Start, faza de Implementare se repeta din nou. Atingerea tuturor obiectivelor înseamnă atingerea etapei de lansare a produsului și finalizarea întregului ciclu de dezvoltare.



"Tehnologia de informație. Inginerie de sistem și software. Procesele ciclului de viață al software-ului”. Acest standard a fost adoptat de Agenția Federală pentru Reglementare Tehnică și Metrologie a Federației Ruse și este similar cu standardul internațional ISO / IEC 12207: 2008. Acest standard stabilește un cadru general pentru procesele ciclului de viață al software-ului care poate fi ghidat în industria software. Standardul nu oferă un model de ciclu de viață specific. Prevederile sale sunt comune oricăror modele, metode și tehnologii ale ciclului de viață pentru crearea de software. Descrie structura proceselor ciclului de viață fără a specifica modul de implementare sau îndeplinire a activităților și sarcinilor incluse în aceste procese.

Prezentarea lecției
Subiecte de mesaje
  • Free Software Foundation (FSF)
  • Licențe software gratuite
  • Software gratuit și sursă deschisă
  • Istoria dezvoltării limbajelor de programare
  • Istoria C. C și C ++
  • Poveste
  • C++ critică
  • Istoria UNIX
  • Modelul ciclului de viață al software-ului în spirală
  • UML (Limba engleză de modelare unificată)
  • Cadrul de soluții Microsoft
  • IDE pentru programare C/C++ pe Windows
  • Compilatoare C/C++
  • Crearea unei aplicații de consolă pe Windows
Întrebări
  1. De ce modelul cascadă al dezvoltării software nu este aplicat proiectelor mari?
  2. Care este diferența dintre modelele de dezvoltare în cascadă și cele iterative?
  3. Enumerați etapele dezvoltării software în metodologia procesului unificat rațional (RUP).

C++ este un limbaj de programare compilat de uz general care combină proprietățile limbajelor de programare de nivel înalt și de nivel scăzut. În comparație cu predecesorul său, limbajul de programare C, cea mai mare atenție este acordată suportului pentru programarea orientată pe obiecte și generică. Numele limbaj de programare C++ provine de la limbajul de programare C, în care operatorul unar ++ denotă incrementul unei variabile.

Limbajul de programare C++ este utilizat pe scară largă pentru dezvoltarea de software. Și anume, crearea unei varietăți de programe de aplicație, dezvoltarea de sisteme de operare, drivere de dispozitiv, precum și jocuri video și multe altele. A fost creat la începutul anilor 1980 de Björn Stroustrup. El a venit cu o serie de îmbunătățiri ale limbajului de programare C pentru uzul său propriu. acestea. nu a fost inițial planificat să creeze limbajul de programare C++.

Suportă paradigme de programare precum programarea procedurală, programarea orientată pe obiecte, programarea generică, oferă modularitate, compilare separată, gestionarea excepțiilor, abstracția datelor, declararea tipurilor (claselor) de obiecte, funcțiilor virtuale.

Numele limbajului rezultat provine de la operatorul de increment postfix unar C ++ (creșterea valorii unei variabile cu unul). Numele C+ nu a fost folosit deoarece este o eroare de sintaxă în C și, în plus, numele a fost preluat de un alt limbaj. De asemenea, limbajul nu a fost numit D pentru că „este o extensie a C și nu încearcă să rezolve problemele prin eliminarea elementelor C”.

Avantajele limbii:

1. Scalabilitate. În limbajul C++, programele sunt dezvoltate pentru o mare varietate de platforme și sisteme.

2. Abilitatea de a lucra la un nivel scăzut cu memorie, adrese, porturi.

3. Abilitatea de a crea algoritmi generalizați pentru diferite tipuri de date, specializarea acestora și calcule de compilare folosind șabloane.

4. Multi-platformă. Compilatoarele sunt disponibile pentru un număr mare de platforme, în limbajul C++ dezvoltă programe pentru o mare varietate de platforme și sisteme.

5. Eficiență. Limbajul este conceput pentru a oferi programatorului control maxim asupra tuturor aspectelor structurii și ordinii de execuție a programului.

Dezavantajele limbii:

1. Prezența multor caracteristici care încalcă principiile siguranței tipului duce la faptul că o eroare subtilă se poate strecura cu ușurință în programele C ++.

2. Suport slab pentru modularitate. Conectarea unei interfețe de modul extern prin inserarea preprocesorului a unui fișier antet (#include) încetinește serios compilarea atunci când se conectează un număr mare de module.

3. Limbajul C++ este greu de învățat și de compilat.

4. Unele conversii de tip nu sunt intuitive. În special, operațiunile pe numere nesemnate și semnate produc rezultate nesemnate.

5. Unii consideră că lipsa unui sistem de colectare a gunoiului încorporat este un dezavantaj al C++. Pe de altă parte, C++ are suficiente instrumente pentru a elimina aproape folosirea pointerilor periculoase; nu există probleme fundamentale în implementarea și utilizarea gunoiului (la nivel de biblioteci, nu de limbaj). Lipsa colectării de gunoi încorporate permite utilizatorului să aleagă propria strategie de gestionare a resurselor.

Care este motivul acestui statut al limbajului C? Din punct de vedere istoric, acest limbaj este inseparabil de sistemul de operare Unix, care astăzi se confruntă cu renașterea sa. Anii 60 au fost epoca formării sistemelor de operare și a limbajelor de programare de nivel înalt. În acea perioadă, sistemul de operare și compilatoarele au fost dezvoltate independent pentru fiecare tip de computer și, adesea, chiar și propriile limbaje de programare (amintiți-vă, de exemplu, PL / I). În același timp, comunitatea problemelor care decurg din aceasta a devenit deja evidentă. O încercare de a crea un sistem de operare mobil universal a fost răspunsul la realizarea acestei comunități, iar aceasta a necesitat un limbaj de programare la fel de universal și mobil. C a devenit un astfel de limbaj, iar Unix a devenit primul sistem de operare care a fost aproape în întregime scris într-un limbaj de nivel înalt.

Relația strânsă cu Unix a oferit lui C un teren de testare pe care nicio altă limbă nu avea la acea vreme. Programarea sistemelor era considerată cea mai dificilă din industrie la acea vreme. În cea mai mare parte, erau atât de dependenți de mașină încât mulți nu s-au gândit deloc la soluția lor altfel decât în ​​asamblare. Limbajele de nivel înalt au fost destinate programării aplicațiilor și au implementat doar foarte limitat funcțiile necesare pentru funcționarea sistemului și adesea doar pentru un anumit tip de mașină.

Limbajul C a fost creat de la bun început, astfel încât să fie posibil să se scrie sarcini de sistem în el. Creatorii lui C nu au dezvoltat un model abstract al executorului limbajului, ci pur și simplu au implementat în el acele capabilități care erau cele mai necesare în practica programării sistemelor. Acestea au fost, în primul rând, mijloacele de lucru direct cu memoria, structurile structurale de control și organizarea modulară a programului. Și, de fapt, nimic altceva nu a fost inclus în limbaj. Orice altceva a fost retrogradat în biblioteca de rulare. Prin urmare, cei nedoritori se referă uneori la limbajul C ca la un asamblator structurat. Dar indiferent de ce au discutat, abordarea s-a dovedit a fi foarte reușită. Datorită lui, s-a atins un nou nivel în ceea ce privește raportul dintre simplitate și capacitățile lingvistice.

Există, însă, un alt factor care a determinat succesul limbii. Creatorii au împărțit foarte abil proprietăți independente și dependente de mașină în ea. Datorită acestui fapt, majoritatea programelor pot fi scrise universal - performanța lor nu depinde de arhitectura procesorului și a memoriei. Puține dintre aceleași părți ale codului dependente de hardware pot fi localizate în module separate. Și folosind preprocesorul, puteți crea module care, atunci când sunt compilate pe diferite platforme, vor genera codul corespunzător dependent de mașină.

Sintaxa limbajului C a stârnit multe controverse.Tehnicile de abreviere utilizate în acesta pot face programul complet ilizibil dacă este folosit excesiv. Dar, așa cum a spus Dijkstra, - mijloacele nu sunt de vină pentru faptul că sunt folosite analfabet. De fapt, abrevierile de sintaxă propuse în C corespund celor mai frecvente situații stereotipe din practică. Dacă abrevierile sunt considerate idiomuri pentru reprezentarea expresivă și compactă a unor astfel de situații, atunci beneficiile lor devin necondiționate și evidente.

Deci, C a apărut ca un limbaj de programare a sistemului universal. Dar el nu a rămas în acest cadru. Până la sfârșitul anilor 80, limbajul C, după ce l-a împins pe Fortran ca lider, a câștigat o popularitate masivă în rândul programatorilor din întreaga lume și a început să fie folosit într-o mare varietate de sarcini aplicate. Răspândirea Unix (și, prin urmare, C) în mediul universitar, unde a fost instruită o nouă generație de programatori, a jucat un rol important aici.

Ca toate limbile, C a fost îmbunătățit treptat, dar majoritatea îmbunătățirilor nu au fost de natură radicală. Cea mai semnificativă dintre acestea, poate, ar trebui considerată introducerea unei specificații stricte a tipurilor de funcții, care a crescut semnificativ fiabilitatea interacțiunii inter-module în C. Toate astfel de îmbunătățiri au fost consacrate în standardul ANSI în 1989, care încă definește limbajul C.

Dar dacă totul este atât de lipsit de nori, atunci de ce sunt încă folosite toate celelalte limbi, ceea ce le susține existența? Călcâiul lui Ahile al limbajului C a fost că s-a dovedit a fi la un nivel prea scăzut pentru sarcinile care au fost puse pe agenda anilor '90. În plus, această problemă are două aspecte. Pe de o parte, instrumentele de nivel prea scăzut au fost integrate în limbaj - în primul rând, lucrează cu memorie și aritmetica adresei. Nu degeaba schimbarea adâncimii de biți a procesoarelor este foarte dureroasă pentru multe programe C. Pe de altă parte, C nu are facilități de nivel înalt - tipuri de date și obiecte abstracte, polimorfism, gestionarea excepțiilor. Ca rezultat, în programele C, tehnica implementării sarcinilor domină adesea asupra conținutului său.

Primele încercări de a corecta aceste deficiențe au început la începutul anilor 1980. Chiar și atunci, Bjarne Stroustrup de la AT&T Bell Labs a început să dezvolte o extensie a limbajului C sub numele de cod. Stilul dezvoltării a fost destul de în concordanță cu spiritul în care a fost creat limbajul C în sine - au fost introduse în el anumite posibilități pentru a face munca anumitor persoane și grupuri mai convenabilă. Primul traducător comercial al unui nou limbaj numit C++ a apărut în 1983. A fost un preprocesor care a tradus programul în cod C. Cu toate acestea, nașterea reală a limbajului poate fi considerată lansarea cărții lui Stroustrup în 1985. Din acest moment C++ a început să câștige popularitate în întreaga lume.

Principala inovație în C++ este mecanismul de clasă, care face posibilă definirea și utilizarea de noi tipuri de date. Programatorul descrie reprezentarea internă a unui obiect de clasă și un set de funcții-metode pentru accesarea acestei reprezentări. Unul dintre scopurile prețuite în crearea C++ a fost dorința de a crește procentul de reutilizare a codului deja scris. Conceptul de clase a sugerat un mecanism de moștenire pentru aceasta. Moștenirea vă permite să creați noi clase (derivate) cu reprezentare extinsă și metode modificate fără a afecta codul compilat al claselor originale (de bază). În același timp, moștenirea oferă unul dintre mecanismele de implementare a polimorfismului - conceptul de bază al programarii orientate pe obiecte, conform căruia același cod poate fi folosit pentru a efectua același tip de procesare a diferitelor tipuri de date. De fapt, polimorfismul este, de asemenea, una dintre metodele de a asigura reutilizarea codului.

Introducerea claselor nu epuizează toate inovațiile limbajului C++. Implementează un mecanism de gestionare a excepțiilor structurat cu drepturi depline, a cărui absență în C a făcut mult mai dificilă scrierea de programe fiabile, mecanismul de șabloane este un mecanism sofisticat de macro-generare profund încorporat în limbaj, deschizând o altă cale către reutilizarea codului, și mult mai mult.

Astfel, linia generală de dezvoltare a limbajului a vizat extinderea capacităţilor acestuia prin introducerea de noi construcţii de nivel înalt, menţinând în acelaşi timp o compatibilitate cât mai deplină cu operaţiile ANSI C., astfel încât programatorul să înceteze efectiv să lucreze direct cu memoria şi sistemul- entitati dependente. Cu toate acestea, limbajul nu conține mecanisme care să oblige dezvoltatorul să structureze corect programul, iar autorii nu au emis recomandări sistematice cu privire la utilizarea constructelor sale destul de sofisticate. Nu s-au ocupat de crearea în timp util a unei biblioteci de clase standard care implementează cele mai comune structuri de date.

Toate acestea au dus la faptul că mulți dezvoltatori au fost forțați să exploreze ei înșiși labirinturile semanticii limbajului și să caute în mod independent idiomuri care funcționează cu succes. Deci, de exemplu, în prima etapă a dezvoltării limbajului, mulți creatori de biblioteci de clasă au căutat să construiască o singură ierarhie de clasă cu o clasă de bază comună Object. Această idee a fost împrumutată de la Smalltalk - unul dintre cele mai cunoscute limbaje orientate pe obiecte. Cu toate acestea, s-a dovedit a fi complet neviabil în C ++ - ierarhiile bibliotecilor de clasă atent gândite erau inflexibile, iar munca claselor nu era evidentă. Pentru ca bibliotecile de clasă să fie utilizabile, acestea trebuiau livrate în sursă.

Apariția claselor șablon a infirmat complet această direcție de dezvoltare. Ei au început să folosească moștenirea doar în acele cazuri când era necesar să se genereze o versiune specializată a unei clase existente. Bibliotecile au început să fie compuse din clase separate și ierarhii mici, fără legătură. Cu toate acestea, pe parcurs, reutilizarea codului a început să scadă, deoarece C++ nu poate folosi polimorfic clase din ierarhii independente. Utilizarea pe scară largă a șabloanelor duce la o creștere inacceptabilă a cantității de cod compilat - să nu uităm că șabloanele sunt implementate folosind metode de generare macro.

Unul dintre cele mai grave dezavantaje ale C++, moștenit din sintaxa C, este că compilatorul are acces la o descriere a structurii interne a tuturor claselor utilizate. În consecință, o schimbare în structura internă a reprezentării unei clase de bibliotecă duce la necesitatea recompilării tuturor programelor în care este utilizată această bibliotecă. Acest lucru limitează foarte mult dezvoltatorii de biblioteci în ceea ce privește modernizarea lor, deoarece la lansarea unei noi versiuni, aceștia trebuie să mențină compatibilitatea binară cu cea anterioară. Această problemă îi face pe mulți experți să creadă că C++ este nepotrivit pentru a rula proiecte mari și foarte mari.

Și totuși, în ciuda deficiențelor enumerate și chiar a indisponibilității standardului de limbaj (asta după mai bine de cincisprezece ani de utilizare!), C++ rămâne unul dintre cele mai populare limbaje de programare. Puterea sa este, în primul rând, în compatibilitatea aproape completă cu limbajul C. Mulțumită acestui lucru, programatorii C++ au acces la toate dezvoltările realizate în C. În același timp, C++, chiar și fără utilizarea claselor , introduce în C o serie de caracteristici și facilități suplimentare atât de importante, încât mulți îl folosesc pur și simplu ca un C îmbunătățit. ...

În ceea ce privește modelul obiect C ++, atâta timp cât programul tău nu este foarte mare (sute de mii de linii), îl poți folosi. Tendința recentă către software-ul componente nu face decât să întărească poziția C++. La dezvoltarea componentelor individuale, dezavantajele C++ nu apar încă, iar conectarea componentelor într-un sistem de lucru nu se mai realizează la nivel de limbă, ci la nivel de sistem de operare.

În lumina a tot ceea ce s-a spus, perspectivele pentru C++ nu arată sumbre. Deși monopolul pe piața limbajelor de programare nu strălucește pentru el. Poate, nu putem decât să spunem cu încredere că această limbă nu va supraviețui unei alte modernizări-extindere. Nu e de mirare, când a apărut Java, i s-a acordat atât de mare atenție. Limbajul, care este apropiat ca sintaxă de C ++, ceea ce înseamnă că pare familiar multor programatori, a scăpat de cele mai flagrante neajunsuri ale C ++, moștenite din anii 70. Cu toate acestea, Java nu pare să fie la înălțimea rolului pe care unii i l-au încredințat.

Rolul special al limbajelor C/C++ în programarea modernă face să fie aproape lipsit de sens să furnizați adrese specifice pe Internet unde puteți găsi materiale despre ele. Pur și simplu sunt prea multe locuri ca acesta. Cu toate acestea, dacă sunteți interesat să aflați mai multe despre evoluția C++, atunci începeți cu un mic articol. http://citforum.syzran.ru/programming/prg96/76.shtml.

Alexandru Sergheev, [email protected]
Articol din revista BYTE / Rusia, martie 2000

Pentru a demonstra în mod clar utilizarea limbilor descrise în practică, am ales o problemă în care era necesar să introducem o serie de numere întregi de la intrarea standard sau dintr-un fișier, apoi să ieșim numai pe cele impare și invers. Ordin. Aceasta este una dintre cele mai simple sarcini, care necesită în esență lucrul cu matrice, bucle, ramificări și I/O pentru a o rezolva și, de asemenea, vă permite să demonstrați apelurile subrutine. În plus, este vizibil și ușor de perceput.

Lista 1.C

1 #include / * Conectați funcții de intrare-ieșire * / 2 3 void main (void) 4 (5 int М; / * Matrice de 10 numere întregi, numărați de la 0 * / 6 int N; 7 pentru (N = 0; N)<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>= 0; --N) / * Treceți prin matrice în sens invers * / 12 if (M [N]% 2) / * ordonați și imprimați cele impare * / 13 printf ("% d \ n", M [N]); 14)

  • Linia 3.În C/C++, execuția programului începe întotdeauna cu funcția principală.
  • Liniile 7 și 11.În antetul buclei, setarea inițială, condiția de continuare și regula pentru recalcularea parametrului buclei sunt specificate cu punct și virgulă. Operațiuni ++ și -/- - cea mai cunoscută dintre abrevierile limbajului C, adică creșterea și decrementarea unei variabile, adică creșterea și scăderea valorii acesteia cu una.
  • Linia 8. Funcţie scanf introduce, conform formatului specificat de primul parametru, valorile variabilelor ale căror adrese sunt specificate de parametrii rămași. Aici, adresa la care este introdusă valoarea este calculată folosind aritmetica adresei, la adresa locației matricei M compensat de N elemente. Același efect poate fi obținut prin scriere & M [N].
  • Linia 12. Operațiune % calculează restul împărțirii. Starea operatorului dacă se consideră îndeplinită dacă valoarea numerică a expresiei este diferită de zero.
  • Linia 13. Funcţie printf- imprimarea după format funcționează în același mod scanf, dar în loc de adrese, se transmit valorile care urmează să fie afișate.
1 #include 2 3 șablon clasa Array 4 (5 public: Array (T Size = 1): M (nou T), N (Size), n (0) () 6 Array (void) (șterge M;) 7 T Count (void) const ( return n;) 8 T operator (int i) const (return M [i];) 9 void Add (T Data); 10 private: 11 T * M; // Adresa memoriei alocate 12 int N, n; // N - alocat; n - folosit 13); 14 15 șablon void Array :: Adăugați (T Date) 16 (dacă (N-n) // Dacă toate au fost alocate 17 (int * P = nou T; // este folosit spațiu, alocați mai mult 18 pentru (int i = 0; i) A; // Matrice de numere întregi de mărime variabilă 28 while (1) // Buclă fără sfârșit 29 (int N; 30 cin >> N; // cin - flux de intrare standard 31 dacă (cin.eof ()) break; // Ieșire din buclă până la sfârșitul fișierului 32 A.Add (N); // Adăugați numărul introdus la matricea 33) 34 for (int N = A.Count () - 1; N> = 0; --N) // Buclă prin tabloul 35 dacă ( A [N]% 2) 36 cout<, și eliberează memorie
  • Rândurile 3-13. Clasa șablon este declarată Matrice cu parametru T... Este o matrice de dimensiuni variabile de obiecte precum T... Desigur, în sarcina noastră nu este nevoie să folosim o clasă șablon. Cu toate acestea, am vrut să demonstrăm cum este creată o structură de date polimorfă în C++ care poate funcționa cu orice tip de element.
  • Linia 5. Constructor de clasă. Inițializează reprezentarea obiectului. De exemplu, pe teren M se introduce adresa blocului de memorie ordonat prin operatie nou T.
  • Linia 8. Un exemplu de supraîncărcare a unei operații. Funcţie operator va fi apelat când parantezele pătrate apar în dreapta obiectului clasei Matrice.
  • Linia 9. Această funcție este cea principală în implementare. Acesta adaugă elemente la matrice, extinzându-l după cum este necesar. Deoarece este mai complex decât celelalte, definiția sa este preluată din descrierea clasei. Funcțiile descrise în corpul clasei sunt implementate în C++ nu prin apelare, ci prin substituție inline. Acest lucru accelerează programul, deși îi crește dimensiunea.
  • Rândurile 15-24. Definirea functiei Arrau :: Adaugă (T)(apropo, acesta este numele ei complet).
  • Linia 27. Creăm un obiect de tip Matrice... Templet Aggau parametrizată după tip int.


Ți-a plăcut articolul? Împărtășește-l