14. Elvek, mĂłdszertanok ======================= ProgramozĂĄsi paradigmĂĄk ----------------------- * A programok elkĂŠszĂtĂŠsĂŠhez absztrakciĂł szintjĂŠn a megkĂśzelĂtĂŠst lehet megprĂłbĂĄlni csoportosĂtani. * Nem kizĂĄrĂłlagosan ennyi van. A gyakrabban elĹfordulĂłk/elfogadottak kerĂźlnek emlĂtĂŠsre. * Nem csak programozĂĄsi, hanem ĂĄltalĂĄban programozĂĄs sorĂĄn elĹfordulĂł nyelvek esetĂŠben beszĂŠlhetĂźnk ezekrĹl. .. warning:: Az elterjedt programozĂĄsi nyelvek jelentĹs rĂŠsze multiparadigma nyelv! ImperatĂv programozĂĄs ~~~~~~~~~~~~~~~~~~~~~~~~ * A megoldandĂł problĂŠmĂĄt lĂŠpĂŠsek, vĂŠgrehajtandĂł procedĂşrĂĄk sorozatĂĄra bontjuk. * LeĂrjuk, hogy a gĂŠpnek mi utĂĄn mit kell majd elvĂŠgeznie. * ProcedurĂĄlis programozĂĄs ennek az egyik leggyakoribb megvalĂłsĂtĂĄsa. Objektum OrientĂĄlt ProgramozĂĄs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * RĂśviden OOP-kĂŠnt szokĂĄs emlegetni. * Az ĂśsszetartozĂł adatokat ĂŠs a mĹąveleteiket egy egysĂŠgben, objektumokkĂŠnt kezeli. * MegkĂźlĂśnbĂśztetĂźnk prototĂpus ĂŠs osztĂĄly alapĂş objektum orientĂĄltsĂĄgot. * TisztĂĄn objektum orientĂĄlt nyelveknek nevezik azokat, melyekben minden objektum. * Vannak objektum alapĂş nyelvek is, melyek hasznĂĄlnak objektumokat, de sajĂĄt tĂpusokat nem lehet definiĂĄlni. (EgyszerĹąbb szkript nyelvekre jellemzĹ.) PĂŠldĂĄul: *SmallTalk*, *Java* FunkcionĂĄlis programozĂĄs ~~~~~~~~~~~~~~~~~~~~~~~~ * A programokat, mint a matematikai ĂŠrtelemben vett fĂźggvĂŠnyeket tekinthetjĂźk. * FĂźggvĂŠnyek hĂvnak fĂźggvĂŠnyeket. * Egy igen lĂŠnyeges fogalma a mellĂŠkhatĂĄsmentessĂŠg. (*Pure function*) * Az adatok ĂŠs a hozzĂĄ tartozĂł mĹąveletek kĂŠt kĂźlĂśn egysĂŠgben kezeljĂźk. * Nagyon jĂłl tesztelhetĹek. * A valĂłs problĂŠmĂĄk egy rĂŠszĂŠre nehezen illeszkednek. PĂŠldĂĄul: *Haskell*, *Clojure* DeklaratĂv programozĂĄs ~~~~~~~~~~~~~~~~~~~~~~ * Azt adjuk meg, hogy az eredmĂŠnyt milyen formĂĄban szeretnĂŠnk viszont lĂĄtni. * ĂltalĂĄban rĂśvid, tĂśmĂśr, emberek szĂĄmĂĄra egyszerĹąbb, magasabb szintĹą megfogalmazĂĄsĂĄt adja a problĂŠmĂĄnak. * A vĂŠgrehajtĂĄsa nehezebb. Bonyolultabb fordĂtĂĄsi, ĂŠrtelmezĂŠsi fĂĄzisra van hozzĂĄ szĂźksĂŠg. PĂŠldĂĄul: *Prolog*, *SQL* Elvek, ajĂĄnlĂĄsok ---------------- * Egyre gyakrabban/gyorsabban vĂĄltozĂł igĂŠnyek a szoftverrel szemben. * A fejlesztĂŠsi ciklusok lerĂśvidĂźltek. * Gyakori, 1-2 hetes kiadĂĄsok * *ExtrĂŠm programozĂĄs* * A tesztelĂŠsnek egyre fontosabb a szerepe. * *Legacy kĂłd*: Nem az elkĂŠszĂtĂŠs ideje szĂĄmĂt, hanem, hogy mennyire van tesztelve/dokumentĂĄlva * *Code Review*, *Pair Programming* * MinĹsĂŠgre vonatkozĂł metrikĂĄk * *Continuous Integration*: Mindig van egy stabil, az Ăśsszes teszteseten ĂĄtesett kiadĂĄs. DRY ~~~ * *Dont Repeat Yourself* * TĂśbbek kĂśzĂśtt az implementĂĄlt funkcionalitĂĄs felesleges redundanciĂĄjĂĄnak csĂśkkentĂŠsĂŠre tĂśrekszik. SOLID ~~~~~ * Single responsibility * Open-closed * Liskov substitution * Interface segregation * Dependency inversion MĂłdszertanok ------------ SCRUM ~~~~~ * Egy agilis szoftverfejlesztĂŠsi metodika. * Keretet, ajĂĄnlĂĄsokat, szerepkĂśrĂśket ad. * 1-4 hetes sprintekben lehet gondolkodni (nem hosszabb tĂĄvĂş fejlesztĂŠsekben). * A cĂŠgek jelentĹs rĂŠsze aktuĂĄlisan ennek valamilyen vĂĄltozatĂĄt hasznĂĄlja. Tipikus szerepkĂśrĂśk * *Scrum Master*: FelĂźgyeli, segĂti a csapat mĹąkĂśdĂŠsĂŠt * *Product Owner*: A termĂŠkkel kapcsolatos igĂŠnyeket kĂŠpviseli, segĂt priorizĂĄlni a feladatokat * *Developers*: FejlesztĹk KANBAN ------ * A mĂłdszert a Toyota Motor Corporation-nĂŠl fejlesztettĂŠk ki. * A Kanban szĂł kĂĄrtyĂĄt jelent. * A kĂĄrtyĂĄk egy-egy feladatot szimbolizĂĄlnak, amelyek sorban ĂĄthaladnak a kĂźlĂśnbĂśzĹ fejlesztĂŠsi fĂĄzisokon. TDD ~~~ *Test Driven Development* A program fejlesztĂŠst 3, egymĂĄs utĂĄn ismĂŠtlĹdĹ fĂĄzisra bontja. * Teszt ĂrĂĄsa az Ăşj funkcionalitĂĄs szĂĄmĂĄra. (Lefuttatva sikertelen lesz, amelyet ĂŠrdemes megnĂŠzni.) * MinimĂĄlis funkcionalitĂĄs hozzĂĄadĂĄsa, amellyel mĂĄr sikeres lesz a teszt. * A teszttel validĂĄlt kĂłd refaktorĂĄlĂĄsa. Az emlĂtett mĂłdszereket kĂźlĂśnbĂśzĹ arĂĄnyban ĂŠs formĂĄban szoktĂĄk hasznĂĄlni.