0% au considerat acest document util (0 voturi)
209 vizualizări448 pagini

Manual de Programare in C

Încărcat de

Dan Pruteanu
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
209 vizualizări448 pagini

Manual de Programare in C

Încărcat de

Dan Pruteanu
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF sau citiți online pe Scribd
Sunteți pe pagina 1/ 448
| Stephen Prata Manual de programare "C++ Traducere de loan Bledea si Eugen Sipos Teora Till original: C++ Primer Plus ~ Third edition Copyright © 2001 Teora ‘Toate drepturie asupra versiuni in imba romana aparin Editurl Teora, Reproducerea intagrala sau partial a textului sav a ilstratilor din aceasta carte este posibilé numai cu acordul prealabil scrs al Edituri Teora. Authorized translation trom the English language edition published by Macmillan * ‘Computer Publishing Copyright © 1999 * Allrights reserved. No part of this book may be reproduced or transmittéd in any form or by any information storage retrieval system without permission from the Publisher. Romanian language edition published by Teora Publishing, Copyright © 1999 Teora Calea Mosilor nr. 211, sector 2, Bucuresti fax: 01/210.98.28 e-mail: [email protected] Teora — Cartea prin posta CP 79-30, cod 72450 Bucuresti, Romania tel: 01/252.14.31 e-mail: [email protected] Coperta: Gheorghe Popescu Tehnoredactare: Techno Media Director Editorial: Diana Rotaru Pregedinte: Teodor Réducanu NOT 4844 CAL C++, MANUAL DE PROGRAMARE ISBN 973-20-0535-1 Printed in Romania Cuprins Prefafa .... Organizarea aril Capitolul 2: Primii pasi in C++ Capitolul Capitolul Capitolul Capitolul Capitolul Capitolul Capitolul exoe 7 8 Capitolul 1: Nofiun introductive 2 : 27 Implementarea datelor 55 Tipuri derivate so 90 Bucle $i expresii relationale ....... 140 Instrucfiuni conditionale si operatori logic. +. 183 Funetiile ~ module ale programarii In C++... 213 Aventura funetiilor 258 Obiecte si clase .. 327 Utilizarea claselor..... 369 Capitolul 1 Capitolul 11: Capitolul 12: Capitolul 13: Capitolul 1 Capitolul 15: Capitolul 16: Anexa A: Anexa B: ‘Anexa C: ‘Anexa D: Anexa E: Anexa F: Anexa G: ‘Anexa H: ‘Anexa | Index. Clasele si alocarea dinamic& a memoriei Mostenirea claselor...... Refolosirea codului in C++. 470 521 Prieteni, excepfii si altele . 584 Clasa string si bblioteca de sabloane standard (Standard Template Library ~ STL) . 640 Intra, iegiri gi figiere.. 707 Baze de numeratie ..... 780 Cuvintele cheie in C++ 783 Setul de caractere ASCII seosne 78M Prioritatea operatorilor . co 788 Alti operatori 791 Clasa sablon string. 799 Metodele si functille STL sveseennsesene 813 Conversia la standardul ANSIISO C++ 839 Raspunsuri la exercitille recapitulative . 845 863 Ute ENN FRR SRE TT Despre autor | Stephen Prata preda astronomia, fizica si informatica la College of Marin din Kentfield California, Este licengiat in stinfe al California Institute of Technology si doctor in stiinge al University of California din Berkeley. Stephen este autorul si coautorul mai multor cir} pentru The Waite Group, inclusiv Artificial Life Playhouse si Certified Course ix Visual Basic 4 Deasemenea, a scris New C Primer Plus, carea primit din partea Computer Press Association, in anul 1990, premiul pentru cea mai bund carte despre calculatoate, si C++ Primer Plus, nominalizati pentru acelasi premiu in 1991 Nota pentru profesori Unul dintre scopurile acestei editii este sf asigure o carte care si poati fi utilizatd att de autodidacti, cat si de profesori, ca manual pentru predare. lati cateva dintre caracteristicile care permit utilizarea ca manual a cri de fafa Aceasts carte dscrieimbojul C++ general deci nu depinde de o implementa anume * Continual urmarestereslzirie comet de standarde SOJANS| Ce = 9 include dca despre jabloane,Ssioteca de sabloane standard (ST, clsa sting, except, RTI zone de * Nu presupune cunossterea anterior a limbsjliC, dec poste f vilzt fib stud Snteror al (Totus sunt de dort unele costing fundamental de progamere) ¢''subiectle sunt arajate astfel Ici capitol nate pot parcarse rapid ca capitole recaptuative entra ce earecunose deja imbalul ¢ 1 Coptolele a exerci recapulative 4 exert de programare * Cartes prezintscbteva subectepotite pent cursed iformati neat tipo Sbsttacte de date, ste, coz Ist simple, hmulan,programere generic uliare recur SWitSi pentru implementare strategie dvde-t-mpera mee 2 haontotescaptoelr sunt desu de sure pert» putea fi pacurse into siptimans, 2" canen dezbate abt oporunitte fos aumitorcaractrsti et moduler de fotoste. De exemplu leash mostenies pubis de relia exte uns compuneres rstenites privat de rela are un, 3 dscuts cand este momentl sb se utizezefuncjile vite Prefata Invdtarea limbajului C++ este o aventura a cunoasterti in special deoarece C++ este 0 fintd in migcare.De laedifia a doua a acestei cif, limbajul C++ a evotuat continu sub {ndrumarea comitetuluiIS0/ANSI se continuat sh se maturizeze pe masura ce progra. smatorii au explora caracteristicile limbsjului, fn schimb, acum exist un standard Ceo gi ru sunt deastepiatschimbiri majore in perioada imediat urmatoare, Prin urmate, este un moment pofrivit s8 recumim starea in care se aft limbajul, gi chiar acesta este scopul acestel cry Principalele modified de confinut ale acest edi sunt * Carta reflect modificrile 5 aSugirile ta iba apdrute dela eliiaanterioars inclusv {ola extins al sabbanelor sal programéri genrice, # Un capitol nou trateazé clase sting 4 Biblioteca de sabloane standard (STL Standerd Template ibrar). Unu dntrescopurie principale ale ui C++ este codulrefolosbl, lar aceste biblioteci de clase funizeazS exemple ute 9 efcente Une dntredscui au fost revizuite pentru asimplfca sa clafica prezentares idellon. Casi n edie anterioare, carta practic limbajul C+ general, care deci mu este legat de nici un tip anume de calculator, sistem de operare sau compilator. Toate programelesu fost testate cu CodeWarrior Pro 2 (Macintosh si Windows) si Microsoft Visual C++ 5.0, iar majoritates au fost testatecu Borland C++ Builder 1.0, Symantec C+ 8.0, Release pentru Macintosh, Watcom C++ 10.6 pentru calculatoare compatibile IBM PC $i GNU gre 2.71 ralat sub Linux. Nici una dintre implementiri nu s-aaliniat complet ca standardul, dar era de asteptat, deoarece toate aceste implementiri au aparut inaintea acceptari stan dardului C++ oferi multe programatorului; profitai de bogie sale Organizarea cartii Aceasti carte este imparts in 16 capitole si 9 anexe prezentate, pe scurt, in continuare: Capitolul 1: Nofiuni introductive Acest capitol descrie modul in cate Bjarne Stroustrup a creat limbajul de programare Cee prinatiugarea la mbujl Ca suport pena progamarea ona eee Metall diferente dinteHimbajeleprocedurate cum esteC, si libajeleorientatetoresbiete, cum este C++ Ve citi despre colaborarea ANSI/I5O pentru dezvellares slandoradnee Capitol deabate 5 mecanismul erin unui program C+s, evidenfiind abontare penta diverse compilatoare C++ actuale. In final, prezinté conventile utilizate in aceasta ce Capitolul 2: Primi pasi in C++ Capitolul2 vi indruma tn procsul de creare a unor programe C4+-simple. Vt tavsta despre rola funeiel natn) sf despre uncle pur de ingtracfun sie ee C++, Petr nile programelor vet tilza cles predeitecrer ren esi fnvite despre crearen si ulizarea variabilelor. In final, vA or fi prezentate Fare, ‘modiulele programsitin Ces Capitolul 3: Implementarea datelor Ce farsizenz pu incorporate pentustocaea a douk pride date: nrg (numere {818 parte racionara) si numerein virguls mobilé (numere cu pure aron ee eee satisfne divesee caring ale programatorilor, Cr+ fers mai mule teen ir Geen categorie Acest capitol diseud aceste tipi inchsv ceares de rene oeeaee fonstante de diverse tipuri, De asemenea, vefi invija cum manipuleazk C++ convercile immplistesiexpicte dela un Up inal Capitolul 4: Tipuri derivate C++ vi permite si construit in tipurile de bees incorporate, tipuri mai compleve. Cea ‘ai avansath form este casa, discutatl tn Capitolle 9, 10, {1,12 4118, Acs capiel discal cxlolate forme, incluzind tablourie, cae stochetcd mal multe vlon oe eet fp, structurile, care stocheazd mai multe valor de tipuy diferite $i pointers cowie (epee memere De aamens vf inet in heap cant ob acd pour et cum sf manipula intdie lpi text. fn fal, vet invdta deapre cite seca Brin care Ca relizenzialocares memorii, pine cate operatoni nev si delete sae Bestionarea explicit a memorieh, Capitolul 5: Bucle i expresiirelafionale Descori, programele rebut realzeze afunl repetate ir in aces scop Cx a tei structur de bel buca tor, bucla wiles bucs eo: wile Aceee Loew a eo fie cnd sp opresck exec, iar operator relational a Go vs pore han teste prin cae s8 ghidafiacestebucle. De asemenea, Yet invita care ok Genre {itesc $i procesesz§ intrareacaracter cu caracter. In fina, vet invata cum ad crati bless bidimensionale cum st utizalBucele imbvcateperina epee Capitolul 6: Instrucfiuni conditionale si operator logic Programele pot avea un comportamentintigentdack seuss pi potivessc omportamental a czcumstane. acest capitol velinvatacumsocontoratfie east Organizarea cri 9 program uilizand instructiunile sf, 4f elsesi switch si operatorul conditional. Veli tnvata, cum si utilizati operatoriilogici pentru a usura crearea testelor de decizie. De asemenea, vet face cunostinti cu biblioteca de func} cetype utilizata pentru evaluarea relatilor dintre caractere, cum este testarea unui caracter pentru a vedea daca este o cifrd saut un caracter care nu poate fi tiparit Capitolul 7: Funcfiile - module ale programarii in C++ Fungfile sunt temelia programérli in C+. Acest capitol se concentreaza asupra caracterisicllor pe care funcjile C+ le impart cu fancttle C. In particular, vei recapitala formatul genera al definite’ unei func i ve} cercela cum prototipurile fancfillor narese fiabiltatea programelor. De asemenea, vetistudia cum se cri fuhefi pentru procesarea tablourilor, grtrilor de caractere si a structurilor, In continuare, veli invaja despre recutsivitate, prn cae se inelege cio functie se autoapeleazd, gi veti vedea cura poate fi aceasta utlizati pentru implementarea une’ strategit divide-etimpera. In final, vel face cunostinjd eu pointer etre functi, care vi permit si utlizafi argumentul une Fanci pentru a spune unei funciis8utillzeze oa doua functie, Capitolul 8: Aventura functiilor ‘Acest capitol cerceteazd noile caracteristici adfugate funcillor de chtre Cs. Vel invafa despre functile in-line, care pot creste viteza de executie a uni program, dat marese dimensiunile acestua, Vajilucra cu variable refering, care asigurd o variants la transferal de informafi catve funcfi. Argumentele prestabiite permit nei unctii sa adauge automat valor la argumentelefunctilor pe care le-ai omis dintr-un apel de functie. Suprasnctrearea functillor va permite si creat functiiavand acelasi nume, dar liste de angumente dferite Toate aceste caracterstci sunt utilizate freevent in proiectarea claslor. De asemenea, vei {invita despre functlle gablon, care vi permit si specifica designul unei famili de funch {nrudite. Vefi invita despre realizarea de programe formate din mai multe figiere. In fe, vaf cerceta clasele de stocare, vzibilitatea,legarea si zonele de nume, care letermind ce pin ale programului cunose o anumith variabila, Capitolul 9: Osiecte gi clase clash eto um tip defini de utiator, ar un obiect este 0 instant a une clas, aga cum este o variabll, Acest capitol va prezint programaren orients spre sbiecte prolectareaclaselor, Declarafa une clase descreiormatia toca Intran covet a clasee side asemenea cperaile(metodele clasl) care pot f leate cu oblectele close, Unele Plrfale unui obict sunt visible lumi exterioare (prtiunea publi at nelesuntasneree (Porgiunea privats). Metodee speciale ale claselor (onsteictori sf desctructors) ink ta sceni atunci cand obiectele sunt create si distruse, In acest capitol vet! invafa despre toate Acesten si despre alte detali ale laselor gi vei veda cam pot h wlicate cases penees implementareatipuilorabstrace de dats (TAD-asi), cam eve sting Capitolul 10: Utilizarea claselor 4n acest capitel voi continua studierea claselor. Pentru tnceput, vei invita despre supratncdrcerea cperatorilor, care va permite sf definiti cum va funciona un operates, cumeste +, cu obicteleclaselor. Vel invaja despre functilleprietene, care pot acceeedatcle tune clase ce mu sunt accesible ntregii lumi, Veli vedea cum pot f atilizat anu cove, tructor si operaterisuprainctrcafi pentru gestionarea conversie!intre tips! de case 40 Organizarea cart Capitolul 11: Clasele si alocarea dinamicd a memoriei Deseori, este util si avefi un membru al clasei care si indice spre o memorie alocat dinamic. Dacd in constructorul unei clase utlizafi new pentru alocarea dinamick a memorici, va asumafi responsabilitatea de a furniza un destructor corespunzitor, de a defini un constructor de copiere explicit side defini un operator de atrbuire explicit. Acest capitol vi prezinté aceste aspecte si cliseutd comportamentul funclilor membre generate implicit dacé nu asigurati definitiiexplicite, Va veti extinde experienta utilizdriiclaselor folesind Pointeri la obiecte i studiind o problema de simulare a unei coz Capitolul 12: Mostenirea claselor Una dintre cele mai puternice caracteristic ale programri orientate spre obiecte este ‘ostenizea, prin care o cast derivatd mostenesecaracersticle clase! de aed pereivng du-vi sf refolosticodal clase de baz8. Acest capitol dscuté mogtentea pubiek ave modeleas reli ese, insemntnd ch un oblect derivat este un cae particeat ol obicctarg de baz8. De exemplu, un fziian este un ear particular de om de ings: Inplementanca relaiicse wn necestéutlizarea unui nou tp de funcie membered hercheeaks Acest capitol discuthagpectle de mai sis, india stale i care mesons ceed ste potvita situa in eare nu ene Capitolul 13: Refolosirea codului in C+-+ Mostenirea public este doar una dintre ile de refolosire a codului. Acest capitol vi prezinld alte cteva metode, Confinerea apare atunci cid 0 elasi congine menor! cave sunt obiecte ale altor clase. Poate fi utlizata pentru a modela relaia are um, Incare o clack are componente ae alfor case, De exemplu, un automobil are un motor PuteH modela acest relat i prin mostenirea privat sau proteati. Acest capitol vi eratd cum gi va Drezint sl dferenfele litre acesteabordiri, De asemenea, vet invita despre claselegablon, cate vi permit sf defini o clas tn functie de tn tip generi, nespecifcat pe cae a5 folosit pentru a crea clase particular specificind tipul respect De exemple; ur eablon de stivl V8 permite si creat ostivi de intregi sau 0 stivi'de sirur, In fra, ven ineteo despre mostenirea publics rmultipl, prin careo clasd poate fi derivatl din mai maltecleer Capitolul 14: Prieteni, exceptii si altele Acest capitol extinde discusia despre prietent,incluzand clasle prietene gi funcfile membre prietene, Apoi, prezintA citeva apariti nol in C++ Incepand cu exceptille, care furnizeazd un mecanism de abordare a ciudjeniilor care pot si apara int-un program, cumar fi valori nepotrivite pentru argumentele funcfilor cau dep ialocate. pot, vel invafa despre RTT] Runtime Type Information ~informati despre tip obtivute 4m timpul ru), care este un mecanism de identficarea tipurilor obiectelor. fina, vel aflavariante mai sigure la conwersile de tip f8r8 restrict Capitolul 15: Clasa string si biblioteca de sabloane standard (Standard Template Library — STL) ‘Acest capitol discuth cateva bibliotect de clase utile, care sunt © adSugare recent la limba}. Clasa string este o variantA comodi siputernich la tadiionatele sar! nent @ Clasa auto_ptr vi ajutd si gestionali memoria alocaté dinamie. Biblioteca de sabloene standard (STL) farnizeaz citevacontainete generic inclusiv reprezentirsablonle sole, silos, cozlor,listelor, muitimilor relator. De asemenea, asigur8 o bibliotel cleesm dle algoritni generic care pot fi folosif att cu containere STL cats cu tablourlebionein | | | Organizarea cri 11 Capitolul 16: Intra, iesiri gi fisiere Acest capitol v8 prezintd 1/0 in Cr gi discuta despre formatarea iesii. Vet invita umn si utlizai metodele claselor pentra'a determina tarea unui flux de intrare saw ee jeyites pentru a vedea de exemplu dact a apirut onepotrivite de tip la intrare saw lacd a fost detectat marcajul de sfirit de fsier. Ce» utzeas mogtenirea pentru a deriva dase de gestionare a 1/0 cu isiere. Ve tnvaja cum s&deschidef sire pentru intare fey, cum si addugafi date intr-unfisier, cum si utiliza fisiere Dinar scum sf accosshalestor un figier fn final, ve Invija s aplicagi metodele stanclard I/O pentru a et din sirul gi pentru a serie in acesten Anexa A: Baze de numeratie ‘Aceast ancxdprezinttnumerele in baza 8, n-baza 16 gin baza 2. Anexa B: Cuvintele cheie in C++ Aceastd anexa confine lista cuvintelor cheie ale lui C++. Anexa C: Setul de caractere ASCII Aceasti anex confine setul de caractere ASCII impreuni cu reprezentarea lor zecimali, octal’, hexazecimalé gi binard Anexa D: Prioritatea operatorilor Aceasti anex confine operatorii C++ in ordinea descrescétoare a prioritail acestora, Anexa E: Alfi operatori Aceasl nex recur ace operator! C++ cate mu au fost trata in cadrulacestel citi de exerplu operator pe if Anexa F: Clasa sablon string Aceastl anexd rezumi metodce si funefileclasei string, ‘Anexa G: Metodele si functiile STL ‘Avosstil anexa grezinta pe scurt metodele pentru containerele STL gi functiile generale pentru algoritmii STL. ‘Anexa H: Conversia la standardul ANSI/ISO C++ Aceastd anexd va prezinta regulile de trecere de la C gi de la implementiri mai vechi CH la C++ standard, Anexa |: Raspunsuri la exerciille recapitulative Aceas tl anex confine rispursurle pentru execifierecapitulaive care apar la ieare stirs de capitol Capitolul 1 Nofiuni introductive in acest capitol veti invita despr * cum adaugs C++ concepteleorentiri spre oblecte la imbajul ¢ + Cum adaugs C++ conceptcle pro- rami genericelalimbsjl C + Istora si lozofa limbajutui ¢ + Programarea procedurald si progra- ‘area orientats spre obiecte + Istoria si filozofia limbajului C++ * Standardele unui fimbaj de programare ‘* Dinamica credrit unui program + Conventiile utilizate in aceasta carte Bine afi venitfn umes C++! Aces limbs pasionant, care combina limbajul Ccu suportul pentru progromarea orientaté spre obiecte, a devenit unul dintre cele mat impertante Limbaje de programare ale anilor 90sipromites continteinforfi gin andi 2000. Mestenizea din C aduce lui C++ traditia uni limba ficient, compact, rapid si portal. Mortenires orienta spre obiecte aduce lui C++ 0 metodologie de programare proaspat8, prosectatd 5 Invinga greutafile produse de compleitatea sarcinilor de programare moderne, Nolle sale caracteristicl sablon imbunatifite aduc acum oalté metodclogie nou de programare, ‘ogramarea genericS, Aceasti mostrire trips este tit obinecuvantarecdtst i slestorn, i transforma int-un limba) foarte puteric, dar aceasta inseammnd ch sunt foarte melte de inva. {mn acest capitol vom cercela fundamontele [ui C++ si vom parcurge unele regull de bazA pentru crearea programelor C++, Celelalt capitol ale cirfi-vi vor invajasd ili Jimbajal C++, pornind de la bazele simple ale timbajului, pnd la gloria programa orientate spre obiecte (OOP ~ Object Oriented Programming) si suita noului argon ferent x obiecte, clase, incapsulare, ascunderea datelor, polimorfism si mosterire. preci gt suportul su pentru programarea generic8. (Desigu, invatand Cs, aceste nehuinise we transforma din elemente de jargon inr-un vocabular necesar unui dscurs elevat) Studiul C++ C++ combin trei traditii de programare diferite ~ traditia limbajului procedural, reprezentati de C, tradifialimbajului orientat spre obiecte, reprezentatd de imbunatatirile aduse de citre clasele C++ la C, si programarea genericd, asigurat& de sabloanele Cr, Acest capitol va trece in revistd, pe scurt, acestetraditii, Dar, pentru inceput, haide}i sk ne gandimla ce aduce aceasté mostenire in studiul limbajului C+-+. Un motiv pentrua folosi C++ esteacela ci vi permite si va insusificaracteristicile sale orientate spre obiecte. Pentru acest lucru aveti nevoie de un fundament solid in limbajul C standard, deoarece acesta furnizeaza tipurile de baz8, operatorii, structurile de control si regulile de sintaxi, Deci, dac& stapaniti deja imbajul C, atunci suntefi pregatits& invafati C++. Dar nu este vorba numai de invitarea cAtorva cuvinte chefe sau a cdtorva constructil, Trecerea dela C la C++ Presupune tot atita striduinS cité ati avut nevoie pentru a invafa C. De aseienea, in «azul incare cunoastetilimbajul C, trecind la C++ va trebui si remunfafi la unele obiceluri de programare. Dac nu cunoasteti limbajul C, pentru a invata C++ trebuie si stapaniti componentele C, componentele OOP si componentele generice, dar nu va trebui sf va dezobisnuiti de anumite obiceiuri de programare. Dack a inceput si va gandiich invatarea limbajulut C++ poate implica tn efort intelectual intens din partea dumneavoastra, nu Scurt istoric 13 efi Aceasté carte vi va ghida de-a lungul intregului proces, into manieré car’, pas u pas,astfl inct efortul intelectual depus s& nu va descurajeze. Carts de ft abordesdIimbajul C+ invitnduva lat bazele se din Cet noe componente, deci in aceasté carte se presupune ch nu aveli cunostine anterioare de Cretinepecinnsareacarctersticor peene rs Iimparteca char dack spn limbajul C poate cd veti considera aceast’ parte carficaflind o recapitulare binevenita De asemenea, evidentiazi unele concepte care vor f importante mai tarziu gi indie’, acolo unde este cazul, diferentele dintre C++ siC. Dups ce veliavea o temelie solidi a limbajului Ia aceasta vet! adduga suprastructura Iui C++. Aici vei invita despre obiecte, clase gi despre modull in care sunt acestea implementate de citre C++, $i veli inva gi despre sabloane. Aceasti cartenu intentioneazd si fie o enciclopedie completa limbajului C++, deci na va explora fiecare coltisor a limbajului. Dar, veti invata toate caracteristicile importante ale limbajulw, inclusiv unele cum ar fi sabloanele,exceptile gi zonele de numel, carac- teristic adaugate recent. ‘Acum haidef si aruncim o scurt& privire asupra evolufieilimbajului C++, Scurt istoric ‘In ultimele céteva decade tehnologia caleulatoarelor a evoluat cu o vitezA uimitoare Un laptop de azi poate calcula mai rapid si poate stoca mai multe informafii decat caleulatoarele mainframe de acum treizeci de ani. (Mulji programator isi pot reaminti de ofrandele de carcele perforate duse pentru cercetare Ja un sistem de calcul puternic, care ‘ocupa o camera si dispunea de o mareafS memorie de 100 KB memorie insuficienta azi chiar si pentru rularea pe un caleulator personal a unui joc bun.) De asemenea au evoluat sillmbajele de programare. Schimbrile na par chiar ati de dramatice, dar sunt importante. Calculatoarele mari si mai puternice permit crearea de programe mai mari si mai complexe care, la randul lor ridied noi probleme in gestionarea $i intrefinerea programelor. Jn anii’70, lirabaje cum ar fi C si Pascal au contribut la inaugurarea erei programérii structurate,o flozofie care a adus intrucdtva ordine gi disciplina intrun domeniu care avea onevoie disperatd deacestecaitii, Pe lang& asigurarea instruamentelor pentru progra- ‘area structurati,limbajul Crealiza $i programe compacte siapide care aveau abilitatea dea accesa directhardware-ul, cum arf gestionarea porturilor de comunicare ia unititilor de disc. Aceste caracterstici au ajutatlimbajul C si devind limbajul de programare dominant al anilor’80. Inte timp, ani’80 au fost martori dezvoltSti unel noi concepfitin programare: programarea orientath spre obiecte, sau OOP, cave s-atntrupat in limbaje cum arfiSmal!Tak gi C++, i examindim mai indeaproape aceste douk evolufil (Csi OOP). Limbajul C La tnceputul anilor 70, Dennis Ritchie, de la Bell Laboratories, luca Ia un profect de dezvoltare a sistemulut de opersre UNIX. (Un sistem de operare reprezints un set de programe care gestionesz4 reuracle uni calclatr gi asigura interfata inte wlzator si sistemul de eeleul. De exempl, sistemul de operare este cel care afgens% pe ecran prompterl de sistem gicel are vi ruleaza programmele) Pent acest proiet Rive aves evoie de un limba) cares ieconcis, i pont realiza programe compacte!rapiee care ¥ namespace = zon de nume, termen £808 echivalent in limba roman’, caracteristicl now introdusa in C-+ prezentati pe larg in Capitolul 8 14 Capitolul 1» Nosiuni introductive s poat control ficient hardware-ul. In mod traditional, pentru a saisface acestecerinte, programatorilapelau la limbajul de asamblare, care este foarte apropiat de codul masind limbajal internal calculatorului, Totus, imbajul de asamblare este un limba de nivel jos, specific unui anumit procesor. Dec, dack dor sk muta un program sers tn limbaj de asamblae pe un alt tip de calculator este posibl sf fits nevoit si rescriti programal in totalitateflosind un alt imbaj de asamblave, Eracasicum de fiecare dati cind eumparafi o main nouds& observa ch designeris-au hota s& modifice loc rolul controalelot forjandu-va si invafai din nou sf conducefi, Dar UNIX era menit st lcreze pe diferite tipuri de calcuatoare (sau platforme). Aceastasugera uilizarea unui limba) de nivel male Un imbaj de nce alt mu depinde de un anumit hardware gi este orienta sprerezolvarea problemelor. Programe speciale numitecompilataoe, raduc un limbajde nivelinaltine-un Jimbaj intern al unui anumit calculator. Aste, puteti utiliza aclayi program In limba} de nivel nat pe diferite platforme,utilzind compilatoare separate pentru fiecae platfor nd Ritchie dorea un limbaj care si combine eficienfalimbajului de nivel os sl accesul In harcwarecu generalitatea sportbilitatea imbajului de nivelinat.Ca urmare,ela construit Himbajul € prin combinarea nor limbaje mai vehi Filozofia program&rii in C Deoarece C++ aduice in limbjul Co noua filozofie de programare, petra tnceput ar trebui si studiem filozofia mai vecke, pe care se bazeaza limbajul C. In general, limbajele de programare licreaz4 cu doud concepte- date algoritmi Dateleveprezintsinformatia utiliza $1 procesath ce ete un program. Algoritmil sunt metodele tilate de clire program (vezi Figura 11). Asemenea celor mai multe limbaje consacrate, Kmbajal C este tun limba) procul. Aceasainsesinnd cel accentueazh parte de algoritan a programa, Din punctde dere concepral programarea procedural consti din inflegerea seulor care ar trebu acute de etre un calculator $1 apo implementarea acstoracjun’ wlizand limbajul de programare. Un program fixeazd un set de procedurl care treble urmate de cftre un calculator pentraa produce un anual rezulat adil se asearnind cu ejth ene deserie unset de proved caetrebuieurmate cite un busta penta progitio peaieur, ‘rime imbsje procedurale, cum ar i FORTRAN si BASIC. au incepul shaming probleme de organizare pe mifsuri ce programele au devenil mai mart De exenpli, Programelewillzears deseorinstrucfuni de ramificare care dirjened cnecufa unula cau B altuiset de instrufiun tn fancied rezultatal unui aru test Mule programe vec avenu secvenje de execute att de incurcate (numite yprogramace spaghett") inet cra aproape imposiil singlegiun program ctindu iar modifearea nti astfel de program co invtaiela derastra Dreptrmare informaticent au deavollat un std progresnare sai disiplint, namitpogramarestracturat Linojul € confine cracteriste eae fac tenzd acetstsabordare’ De exempl,programnarea sructuratalteaza ramifctte ale. gerea instructiunit care urmenad afi executatt) la un mic set de construe eu tn Comportament manierat. Linbajal Ccontine aceste construct (oucla fer, buca white, brucla co smile gi instruciunca eis) n vocabularul propriu Proiectarea descendent era un alt princi nou. Ideca este de a impart programele sari in sarcini mal mic si mai usor de getional. Dack una dintre ecestea ese aca pres ‘ast, ipirfitvo si pe ea in altele mai mic. Confinvaf asl pana eand programa va impart in module mich usor de programa Pacel of fine i eamera de Kuck, Ale! Ei bine, facet ordnetn bron gt aranat-va efile pe raft Aolew Fi bine, incepei cu ‘rou facl ordine in iecare sera ncepand cucel din moe mm, poate asa coi Sash) Concept limbojulat Cusurea aceastt abordare ncurajindirvasdlesvotta unt deprogram numste ont, care reprezinté module desareninaividuale. Dupl cum ponte | | | Scurtistoric 15 ALGORITMI ‘Beeaged unt ‘omogenizati untul H | acsiugati weptat zahiral | PROGRAM oeagch zahir out spargetiouile Figura 1.1 Date + algoritmi = program. c& afi observat dep, tehicile programirli structurate reflectd o conceptie procedural, gi ndind un programdin punctul de vedere al acfiunilor realizate de acesta. Programarea orientat& spre obiecte Gu toate cd principille programs structurate imbunjesc claritatea gi fiabiltatea siusureaed inteeinefea programelor, totus! programarea la scaralargh rime o provo- Enre. Programarea orientld spre obiecte (OOF) aduce un all mod de abordare a acestet provochh. Spre deosebire de programarea procedural, care accentueazl algoritmil, ‘OOP pune accentul pe date. n loc s8 incerce si potriveascd problema la abordarea proce- duralé a limbajala, OOP tnceare sh potrveascd Imbajul la problema, Ideea este de a prolecta formatele datelorastelinett sh corespunda carecteristicloresenfiale ale unei Preis latest ospecicate cae descrie un nu format de date tar un otc este structurt de date particular constraita conform acestui plan. De exernpi,o clas poate descrie proprietitile generale ale tnwsi membru din conducerea unei corporatii (cum ar fi ‘rumele func, slariul sau aptitudiile neobignte, in imp ce un object va reprezenta tun anumit membra (Guilford Sheepblat, vicepresedinte, 3250006, sie ulizeze figierul CONFIGSYS). In general, o casa defineste ce date sunt folosite pentru a reprezenta un biect se operafit pot fi ealizate asupra acelor date. De exemplu, #8 presupuncm ch dlezvoitai un program de desenare pe calculator capabl ss traseze un drepringh. Pute defi o elasd care sf deserie un dreptunghi. Partea de date a specificatel poate include tuerur cum ar f coordonatele vifurler,ralineagtfimea, cloarea gistil marginilr, respectiv euloares i modell utiliza penta umplerea dreptunghiulul Partea de operat 2 specificates poste confine metode pentru stares dreptunghiulu,redimensionares, rotten schimbaret culorilorlmodelelor acestuia, precum copiers dreprunghiulil into tit locafie. Dal vf utiliza prograamul dumneavoasrs pent a desena un dreptunghs, cesta va crea un obietin fanete de specifica clase, Acestobiect va confine toate datcle are deseriu dreptunghiul, lar pentru a modifica acest dreptunghi veil putea utiliza 16 — Capitolul 1» Nofiuni introductive rmetodeleclasei, Dack desenafi dou dreptunghiur, programul va crea dou obiecte, cite unul pentrfiecare dreptungh. Abordarea OOP in proiectarea de programe presupune pentru tnceput proietarea claselorenre vor reprezenta cu exactitateaccle Iucrui cu care va luera proframal, De exemplu, un program de desenare poate defini clase care sd reprezinte drestenghiur, Jini, cereuri, pensule,creioane i altel, Defiiile case, refine, include dleeceore operatilor permise pent fieare clas, cum ar fi mutarea unui cer sau totirea wet lath Apoi vel continua cu proietares unui program utilizind obiecele acelor clase Procesu de trecere de la un nivel de organizare inferior, cum sunt clasele la un nivel superioe coe ar i proiectarea programelor, se numeste proietareescendentl Desigur In OOP exist i altceva, nu numaiasocierea de date si metode in definiia unei clase. De exemplu, OOP facilitenzi crearea de cod reutlizabil care in cele din ure ob poate scipa de munca suplimentar, Ascundereaiformatilor protejeazA dateleatpotriva ‘nu aces inadecvat.Polimorfismul vi permitest cea defini multiple pentru crerator $f functicontextul programuluidetermindnd care defiifie vai utiieath, Mostensrce va permite sk derivai clase noi pornind din clase vechi. Dupa cum vedefi, programerce Grint spre blest aduce male et no nee abode frie programa i comparatie cu programatea proceduralA, In Joe si vi concentrafi asuprd sascallon vi concentrafiasupra reprezentirifconceptclor. In oe st abordafio programare descencienta utlizat uncorio abordare ascendentd, Aceast cate vi va prezentaacesteaspecte pin multe exemple ujor de ines. Proiectarea unei clase utile gi sigure poate fio sacink dificil, Din fereire, imbajle OOP usureazd Incorporarea claselor existente in programele propril. Production farnizenzi ovarietate de bibliateci de clase utile, printe careslbiblictect de clase proiecate pentru a simplificacrearea de programe pentru medii cum ar fi Windows sau Macinteats Unul dine avantajelerealeale ui C+ este acelac& vi permite sh reutlizai sk adapta cu usurinta coduriexistente,Indelung tetate Programarea generic& Programarea genercé este un alt model de programate sustinut de C++. Aceasta, ca $i OOP, are scopul de a simplifica reutiizarea codului i foloseste tehnica abstactisiit conceptelor generale, Dar, in timp ce OOP accentuenzi aspectul de date al programe programarea generic accentuea algoritme. lar contr atenfci este aul. OOP fe tn instrument Pent gestonaren proiecelor mari in timp ce programarca gereeich fumizeazd instrumente penta realizarea de sarcni obisnute, cum ar sertarea datos con combinarea istelor. Trmenul generic insearnn& createa de cod independent de tip. Datele Cs sunt de mai multe tipur~ inregi, numerice cu piri fractionare, eractere, grunt de cactere structuri compuse de diverse tipur definite de ulizator Dack, de exemphu dost si sorta date de diverse tipuri in mod normal trebuie si creat func de sorte separate pentru iecae tip. Programarea generici presupune extinderea limbajalti asi! ineates pute Serie funcfii pentru un tip generic (care mu este specifica sis leutlizafi pentru o variate die tipurl efectve, Sabloanele C++ furnizeazd un mecanism pentru realizarea acest luere Ct : Asemenea limbajului C, C++ sia inceput viafa tn laboratoarele Bell, unde Bjarne Stroustrup |-a dezvoltat la inceputul anilor ’80. Ela afirmat c& ,C#+ a fost proiectat in primul rind pentru ca ew si prietenii mei si nu fim nevoiti s§ programm in limbajul de asamblare, in C sau in diferite limbaje moderne de nivel inalt. Scopul Iui principal este | | Scurt istoric 17 acela dea ugura si dea face mai plicut serierea de programe bune de cite programatorit individuali” (@jarne Stroustrup, The C++ Programing Langusge). Stroustrup a fost mai prencupats8 fac limbajel C+ util decits8 impund flozofi sau stilur de programate partculare, In determinarea cavactersticlor Hmbajului nevoile adevirate de programare sust mult mai importante decit puritateateoreticl, Stroustrup a dezvoltatIimaajul Cr+ din C, bazindu-se pe concizia limbajului C, potrivitea se la programarea de sistem, disponbilitatea sa Sepang apropiera fat de sistem de operare UNIX Aspectal OOP al imbajului +a fostinsprat de un limba) de simulare pe calculator sum Simula67, Stoustrup a adagat la limbajul C caracteristicle OOP fith a modifica semnificatlv camponenta C. Aste, C+ este un supersetal imbajuluiC, adil orice program valid C este de asemenea si un program valid C+, Totusi exists unele discrepante minore, fara importanfa. Progremele C++ pot utiliza bibliotec de programe C existent, Bblioteile sunt colecti de module de programare pe care le putefi apela dintr-un program. ‘Acesteafurnizenzi solu demons. trate pentru multe probleme de programare uzuale, economisin- u-vi astiel timp si efort. Aceasta a ajutat la rspinirea Co ‘Moxtenitea OOP furizeaz% un nivel fnalt de abstractizare @ « rice_de_nord.arata(); Mosenivea fuze un sects 'Numele de C+t vine de a ope- a hirdviae del jo ratorul de incrementare ++ al lim- bajuluiC, care mresteeuo unitate valostea une! variable. Dar de fept, Sot byte at (C++ sugereazi sio versiune imbu. tay a limbajuliC. Un program de calculator trans- Iateaz’ o problema reals intro serie de acttunt care rebuie efectuate de citreun calculator. In timp ceaspec tul OOP ofers limbajului C++ abi tatea dea se lege de conceptele probleme, partea de Coferlimbajului C++ abitatea de ase apropia de hardware veei Figura 12), Aceasti combinafie de aptitudin’aajutatarispandirea Lmbajului C++. Deasemenes, presupune so modifcarea gandiril atune’ cAnd treet de aun aspect al unui program laaltul, int.adevr, uni purigti OOP aseamvnd adlugareacaracerstich Jor OOP Ia C cv adiugarea de aripi unui pore, chiar dac& acesta este unl ambifios) De asemenca, deoatece C++ grefeazi OOP pe limbajul C, pute ignora caracteristcle sent spreblecte ale C++. Dar dact procedafiastel vet avea multe ce pletlut Stroustrup aadéugatsabloane, permitind astel programarea generic8, mumai dupa ce linbajul Ce arepurtat eteva succese. $i abia dupa ce caracterist cle bazate pe sabloane au fost utilizate si imbundtitite a devenit evident faptul cd acestea erau poate la fel de semnificative casi OOP - sau chiar mat importante, ar spune until. Faptul ef limbajul Cee ‘ecorporeazi atit OOP cit si programarea generich demonstreaza faptul ck Ca pune accentul pe utiltate si nu pe abordarea ideologich, iar acesta este unul dintre motvele succesului obtinut de cdtre acest limba} 01000°te 0 ee Figura 1.2 Dualitatea limbajului C+.

S-ar putea să vă placă și