Szerintetek képes a Python + Cython helyettesíteni a backend fejlesztéshez használt nyelvek nagy részét?
Érvek:
- Pythonnal rendkívül gyors a fejlesztés
- Az egyik legérettebb nyelvről van szó. Kevés olyan nyelv van, amelyhez ennyi csomag létezne
- A generator és generator comprehension nagyon hasznos nyelvi feature-ök alacsony memória használatú alkalmazások fejlesztésére
- A Cython segítségével a hotspotok gyakorlatilag ugyanúgy optimalizálhatóak, mint C nyelv használatával - sőt, a már optimálisan megvalósított beépített szerkezetek miatt erre még bővebb eszközkészlet is áll rendelkezésre
- Már meglévő C/C++ kódbázis könnyedén hasznosítható, sőt, akár Java / .NET szoftverekkel is integrálható
Ellenérvek:
- viszonylag kevés fejlesztő ismeri professzionális szinten a Python nyelvet
- sajnos sok ügyfél esetében egy PHP-t nem tud helyettesíteni, mivel sokan ragaszkodnak a PHP környezetez (bármily rossz is legyen az), illetve meglévő PHP kódbázisba sem lehet könnyen Python modulokat integrálni
"De mi van, ha készítened kell egy HumanoidRobot osztályt is, ami szintén tud beszélni? Ilyenkor persze készíthetsz egy Beszélő absztrakt osztályt, amiből az Ember és a HumanoidRobot származik, viszont ez egyszeres öröklődéssel csak akkor működik, ha nincsenek egymásnak ellentmondó metódusok. Például a Séta, ami a láb nélküli HumanoidRobot subclassekre nem vonatkozik. Ezt már nem lehet pusztán egyszeres öröklődéssel megoldani."
Na de miért akarnál egy Séta metódust a Beszélő ősosztályba rakni?
A Beszélőben legyen simán egy Beszél, az abból származó Emberbe meg beleraksz egy Séta-t, oszt' csókolom. A robot úgysem sétál..
Ha a Beszélő-be rakod a Sétát, az egyrészt logikailag is értelmetlen lenne, mert abból, hogy valami Beszél, nem következik, hogy Sétálni is képes, másrészt meg sérti a Single Responsibility elvet is.
"Ez a dolog kezd átmenni hitvitába"
Szerintem egyáltalán nem.
"Na de miért akarnál egy Séta metódust a Beszélő ősosztályba rakni?
A Beszélőben legyen simán egy Beszél, az abból származó Emberbe meg beleraksz egy Séta-t, oszt' csókolom. A robot úgysem sétál..
Ha a Beszélő-be rakod a Sétát, az egyrészt logikailag is értelmetlen lenne, mert abból, hogy valami Beszél, nem következik, hogy Sétálni is képes, másrészt meg sérti a Single Responsibility elvet is."
Félreérthetően fogalmaztam.
A Séta egy külön Sétáló osztályhoz tartozik, amivel rendelkeznie kell a HumanoidRobot és az Ember osztályoknak, de mondjuk a LábnélküliHumanoidRobot osztálynak nem. Itt ugye az a megoldás Java-ban pl., hogy a sétát és a beszédet interface-el kényszeríted ki, ami kódduplikációhoz vezet.
Na így már érthető.
Hát nem nem véletlenül van benne minden OOP design-nal kapcsolatos írásban/könyvben rögtön a legelején, hogy "favor composition over inheritance" :)
Alkalmazni kell, és akkor nincsenek ilyen problémák :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!