Programarea orientată pe obiecte în limba c

În primul rând, este necesar să se sublinieze că este necesar să se evalueze meritele și, în special, deficiențele C ++ în contextul principiilor pe care a fost construit limba și cerințele care i-au fost prezentate inițial.







C ++ este un limbaj extrem de puternic, care conține instrumente pentru crearea de programe eficiente pentru aproape orice scop, de la utilități de nivel scăzut și drivere până la pachete software complexe de diverse scopuri. În special:

Partea C ++ dezavantaje moștenite de la limba strămoș - Cu - și a provocat inițial să specifice cerința cea mai mare posibilă compatibilitatea cu Cu. Acestea sunt neajunsuri precum:

  • Sintaxa care cauzează erori:
  • Operația de asignare este desemnată ca =, iar operația de comparare ca ==. Ele sunt ușor confuzi, iar operatorul de atribuire returnează o valoare, astfel încât expresia atribuire este pe loc este corect sintactic și structurile în buclă și apariția ramificare în locul valorilor logice sunt de asemenea admisibile, astfel încât designul eronat este corect sintactic. Un exemplu tipic de eroare similară:
    dacă (x = 0) <операторы>
    Aici, în declarația condiționată, o sarcină este scrisă din greșeală în loc de o comparație. Ca rezultat, în loc de a compara valoarea curentă a lui x cu zero, programul atribuie x o valoare zero și apoi o interpretează ca valoare condițională în instrucțiunea if. Deoarece zero corespunde valorii logice "false", blocul de instrucțiuni din construcția condiționată nu va fi executat niciodată. Erori de acest tip sunt greu de identificat, dar mulți compilatori moderni oferă diagnosticul unor astfel de modele.
  • Operațiile de asignare (=), increment (++), decrementare (-) și altele returnează o valoare. În combinație cu abundența operațiilor, acest lucru permite, deși nu obligă, crearea unor expresii greu de citit. Prezența acestor operațiuni în Marea a fost cauzată de dorința de scule de mana, optimizare cod, dar compilatoare optimizarea în prezent generează, de obicei, cod optim și expresii tradiționale. Pe de altă parte, unul dintre principiile principale ale limbajelor C și C ++ este de a permite programatorului să scrie în orice stil, în loc să impună un stil "bun".
  • Macroanele (#define) sunt un instrument puternic, dar periculos. Ele sunt stocate în C ++, în ciuda faptului că nevoia lor, datorită șabloanelor și funcțiilor încorporate, nu este așa de mare. În bibliotecile standard C vechi, există multe macrocomenzi potențial periculoase.
  • Unele conversii de tip nu sunt intuitive. În special, operațiunea cu numere nesemnate și semnate produce un rezultat nesemnificativ.
  • C ++ vă permite să săriți spargerea ramificațiilor instrucțiunii switch pentru a executa în mod consecvent mai multe ramuri. Aceeași abordare este adoptată în limba Java. Există opinia că acest lucru face dificilă înțelegerea codului. De exemplu, în C #, trebuie să scrieți întotdeauna fie pauză, fie să utilizați cazul N pentru a specifica în mod explicit ordinea execuției.
  • Preprocesorul moștenit de la C este foarte primitiv. Acest lucru conduce pe de o parte faptul că, cu ajutorul său este imposibil (sau dificil) pentru a efectua unele probleme de meta-programare, iar pe de altă parte, din cauza primitivitate sale, de multe ori duce la erori și necesită o mulțime de acțiune pentru a eluda eventualele probleme. Unele limbi de programare (de exemplu, Scheme și Nemerle) au sisteme de metaprogramare mult mai puternice și mai sigure (numite și macrocomenzi, dar macar macro-uri C / C ++).
  • Suport necorespunzător pentru modularitate (de fapt, în clasicul C, modularitatea la nivelul limbii lipsește, furnizarea acesteia este mutată la linker). Conectarea modulului de interfață prin intermediul unui preprocessor extern introduce fișierul antet (#include) incetineste serios compilare prin conectarea unui număr mare de module (deoarece fișierul rezultat, care este manipulat de compilator, este foarte mare). Această schemă a fost copiată neschimbată în C ++. Pentru a elimina acest dezavantaj, multe compilatoare implementează un mecanism pentru fișiere antet precompilate (antetul precompilat în engleză).






Următoarele dezavantaje ale C ++ sunt:







Articole similare

Trimiteți-le prietenilor: