Objektum-orientált programozás a c nyelven
Mindenekelőtt ki kell emelni, hogy az értékelés az előnyök és különösen a C ++ hiányosságokat kell keretében az elveket, amelyek a szerkezet a nyelv, és a követelmények, hogy a bemutatott neki kezdetben.
A C ++ rendkívül erőteljes nyelv, amely olyan eszközöket tartalmaz, amelyek hatékony programokat hoznak létre szinte bármilyen célból, az alacsony szintű segédprogramoktól és az illesztőprogramoktól a különböző célú összetett szoftvercsomagokig. Különösen:
A C ++ hátrányainak egy részét öröklik az ősi nyelvből - C, - és az eredetileg meghatározott követelmény a C-val való esetleg nagyobb kompatibilitással jár. Ezek olyan hiányosságok, mint:
- A hibákat okozó szintaxis:
- A hozzárendelési műveletet = =, az összehasonlító műveletet pedig ==. Ezek könnyen összetéveszthető, és az értékadó operátor értéket ad vissza, így a feladat kifejezés a helyszínen szintaktikailag helyes és a hurok struktúrákat és előfordulása elágazási helyett a logikai értékek is lehetségesek, így a hibás tervezés szintaktikailag helyes. Egy hasonló hiba tipikus példája:
ha (x = 0) <операторы>
Itt a feltételes kimutatásban egy megbízást véletlenül írunk, összehasonlítás helyett. Ennek eredményeképpen az x aktuális értékének nullával való összehasonlítása helyett a program x értéket rendel nulla értékhez, majd az if utasításban feltételként értelmezi. Mivel a nulla a "hamis" logikai értéknek felel meg, a feltételes konstrukcióban szereplő mondatok blokkja soha nem fog végrehajtódni. Az ilyen hibákat nehéz azonosítani, de sok modern fordító kínál néhány ilyen terv kidolgozását. - A hozzárendelési műveletek (=), növekmény (++), csökkenés (-) és mások értéket adnak vissza. A műveletek bőségével együtt ez lehetővé teszi, bár nem kötelező, hogy nehezen olvasható kifejezéseket hozzon létre. A műveletek C-ben való jelenlétét a kézi kódoptimalizálás eszköze megszerzésének vágya okozta, de jelenleg a fordító optimalizálása általában a hagyományos kifejezések optimális kódját adja. Másrészt a C és C ++ nyelvek egyik fő elve az, hogy lehetővé tegye a programozó számára, hogy bármilyen stílusban írjon, és ne "jó" stílust állítson elő.
- A makrók (#define) erőteljes, de veszélyes eszköz. A C ++-ban vannak tárolva, annak ellenére, hogy a sablonoknak és a beépített funkcióknak köszönhetően szükségük nincs. A régi C szabványos könyvtárakban számos potenciálisan veszélyes makró található.
- Egyes típusú konverziók nem intuitívak. Különösen az alá nem írt és az aláírt számok művelete jel nélküli eredményt eredményez.
- A C ++ lehetővé teszi, hogy kihagyja a törést a kapcsoló utasítás ágai között, hogy több ágat következetesen végrehajtson. Ugyanezt a megközelítést alkalmazza a Java nyelv. Véleményünk szerint ez megnehezíti a kód megértését. Például a C #-ben mindig meg kell adnia a szünetet, vagy használnia kell az "goto case" -ot, hogy kifejezetten meghatározza a végrehajtás sorrendjét.
- A C-ből örökölt preprocesszor nagyon primitív. Ez ahhoz vezet, egyrészt az a tény, hogy segítségével lehetetlen (vagy nehezen), hogy elvégezzen néhány meta-programozási feladat, másrészt, mert a primitívség, gyakran vezet hibák és megköveteli a sok megkerülni a lehetséges problémákat. Néhány programozási nyelvek (pl rendszer és Nemerle) van egy sokkal erősebb és biztonságosabb rendszert meta-programozás (más néven makrókkal, de egy kicsit emlékeztet a makrók C / C ++).
- Gyenge támogatás modularitás (sőt, a klasszikus C modularitás szintű nyelv nem áll rendelkezésre, a szoftver áthárítani a linker). Csatlakozó interfész modul egy külső elpárologtató helyezze a header fájlt (#include) komolyan lassítja összeállítása csatlakoztatásával számos modult (mert a kapott fájlt, amely kezeli a fordító, nagyon nagy). Ezt a sémát a C ++ változatlan formában másolta. E hiányosság, sok fordító egy olyan mechanizmus van előre lefordított header fájlok (Eng. Előre lefordított header).
A C ++ alábbi hátrányai: