Java best practices A&K AKADÉMIA MARKOS ANDRÁS HT TPS://AK-AKADEMIA.HU
Miről lesz ma szó? 1. Bevezetés A Java nyelv és verziói Új nyelvi elemek áttekintése 2. Programozási elvek YAGNI DRY vs. WET KISS SOLID Clean code 3. Q&A 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 2
Bevezetés 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 3
Mi a Java? A Java egy platformfüggetlen általános célú objektumorientált osztályalapú konkurens programozási nyelv. 1995-től a Sun Microsystems fejlesztette 2009-ben az Oracle felvásárolta (7,4 milliárd $) 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 4
Java verziók Verzió Kódnév Kiadási dátum JDK Alpha / Beta 1995.03.23. JDK 1.0 Oak 1996.01.23. JDK 1.1 1997.02.19. JDK 1.1.7 Brutus 1998.09.28. JDK 1.1.8 Chelsea 1999.04.08. J2SE 1.2 Playground 1998.12.04. J2SE 1.2.1 1999.03.30. J2SE 1.2.2 Cricket 1999.07.08. J2SE 1.3 Kestrel 2000.05.08. J2SE 1.3.1 Ladybird 2001.05.17. J2SE 1.4.0 Merlin 2002.02.13. J2SE 1.4.1 Hopper 2002.09.16. J2SE 1.4.2 Mantis 2003.06.26. J2SE 5.0 (1.5.0) Tiger 2004.09.29. Java SE 6 Mustang 2006.12.11. Java SE 7 Dolphin 2011.07.07. Java SE 8 Spider 2014.03.18. Java SE 9 2017.09.21. Java SE 10 2018.03.20. Java SE 11 2018.09.25. 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 5
Java népszerűsége 2018 áprilisi TIOBE index alapján Helyezés Programozási nyelv Arány 1 Java 15,777% 2 C 13,589% 3 C++ 7,218% 4 Python 5,803% 5 C# 5,265% 6 Visual Basic.NET 4,947% 7 PHP 4,218% 8 JavaScript 3,492% 9 SQL 2,650% 10 Ruby 2,018% 11 Delphi / Object Pascal 1,961% 12 R 1,806% 13 Visual Basic 1,798% 14 Assembly language 1,655% 15 Swift 1,534% 16 Perl 1,527% 17 MATLAB 1,457% 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 6
Java működése Java forráskód (.java) javac fordító bájtkód (.class) JVM JVM JVM Windows Linux Macintosh 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 7
Rövidítések Rövidítés Angol kifejtés Magyar kifejtés JLS Java Language Specification Java nyelvi specifikáció JVM Java Virtual Machine Java virtuális gép JRE Java Runtime Environment Java futtató környezet JDK Java Development Kit Java fejlesztői csomag Java ME (J2ME) Java Micro Edition - Java SE (J2SE) Java Standard Edition - Java EE (J2EE) Java Enterprise Edition - GC Garbage Collector szemétgyűjtő 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 8
Új nyelvi elemek áttekintése Verzió Új nyelvi elemek Kiadási dátum Java 12 raw String switch expressions microbenchmark suite Java 11 Dinamikus class fájl konstansok Epsilon: no-op garbage collector Helyi változó szintaxis lambda paraméterekhez Alacsony overheadű heap profile-olás Unicode 10.0.0 Flight Recorder Z Garbage Collector Nashorn JavaScript Engine deprecated lesz Egyedülálló Java forrásfájlok futtatásának lehetősége HTTP kliens Aarch64 újítások: Math osztály sin, cos, log metódusai teljesítményének javítása Transport Layer Security (TLS) 1.3 Kulcsegyeztetés a Curve25519 és Curve448 kriptográfiával ChaCha20 és Poly1305 kriptográfiai algoritmusok megvalósítása Pack200 és Unpack200 eszközök és a Pack200 API a util.jar csomagból történő eltávolítása 2019.03. 2018.09.25. 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 9
Új nyelvi elemek áttekintése Verzió Új nyelvi elemek Kiadási dátum Java 10 párhuzamos teljes garbage collection a G1 GC-hez var copyof Graal VM alternatív memóriaeszközök támogatása Docker észlelés gyorsabb JShell indulási idő Java 9 modul rendszer Collection factory metódusok JShell: Java REPL privát interfész metódusok Java 8 lambda kifejezések és funkcionális interfészek Stream API default és statikus metódusok interfészekben Date and Time API Collection API újítások core API újítások Optional 2018.03.20. 2017.09.21. 2014.03.18. 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 10
Új nyelvi elemek áttekintése Verzió Új nyelvi elemek Kiadási dátum Java 7 try-with-resources switch Stringekre NIO.2 aláhúzásjel szám literálokban 2011.07.07. Java 6 Collections Framework újítások Console Java 5 generics enum Executor Framework 2006.12.11. 2004.09.29. 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 11
Programozási elvek
YAGNI YAGNI = You Ain t Gonna Need It! DTSTTCPW = Do The Simplest Thing That Could Possibly Work! Csak olyat fejlesztünk le, amire megbízást kaptunk. Miért? Mert a megrendelő ezt kérte. Ha olyat fejlesztünk, amire nem kért, az szerződésszegésnek minősülhet. Ha több kódot írunk, abban több lesz a hiba. Az Extreme Programming (XP) többi elemével együtt alkalmazandó: folytonos refaktorálás folytonos automatikus unit tesztelés folytonos integráció 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 13
DRY vs. WET DRY = Don t Repeat Yourself! Every piece of knowledge must have a single, unambiguous, authoritative representation within a system. The Pragmatic Programmer (Andrew Hunt, David Thomas) Egy rendszeren belül minden tudásrésznek kell hogy legyen egy egyedülálló, egyértelmű, ellentmondást nem tűrő reprezentációja. Betört ablak -elv (broken windows theory) kriminológiai elmélet miszerint a bűnözés a rendetlenség következménye (betört ablakot nem javítják ki, felhívás másoknak, hogy ez egy elhagyatott ház => nincsenek szabályok) kőleves (a.k.a. bauxitfőzelék) béka a forró vízben gumi kacsa debuggolás WET = Write Everything Twice WET = We Enjoy Typing WET = Waste Everyone s Time 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 14
KISS Keep It Simple, Stupid! Keep It Stupid Simple! Keep It Simple, Silly! Keep It Short and Simple! Keep It Simple and Straightforward! Keep It Small and Simple! 2018. 11. 08. 16:28 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 15
SOLID elvek S SRP Single Responsibility Principle O OCP Open / Closed Principle L LSP Liskov Substitution Principle I ISP Interface Segregation Principle D DIP Dependency Inversion Principle 2018. 11. 08. 16:34 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 16
SOLID Single Responsibility Principle Egy osztály pontosan egy feladatért legyen felelős a szoftverben! Csak egy ok eredményezhesse azt, hogy változzon. Vagyis a program specifikációján végzett egyetlen változtatás egyetlen osztály implementációjának a változtatását vonja maga után. Példa: Konzolos alkalmazásban a felhasználótól történő adatbekérés a bekért adatokon elvégzett műveletek a számítás eredményének megjelenítése mind külön felelősségi kör, ezért ezek külön osztályba tartoznak. 2018. 11. 08. 16:43 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 17
SOLID Open / Closed Principle A szoftvert alkotó modulok legyen nyitottak a kibővítésre, de zártak a módosításra! open for extension, closed for modification Például egy osztály forráskódját, amit már egyszer megírtunk, leteszteltünk és már az éles rendszeren fut, ne kelljen módosítani, hanem inkább úgy bővítsük ki, hogy új, leszármazott osztályokat hozunk létre! 2018. 11. 08. 16:49 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 18
SOLID Liskov Substitution Principle Liskov helyettesítési elv: Egy program objektumainak helyettesíthetőknek kell lenniük a leszármazott osztály példányaival a program helyes működése megsértése nélkül! Ha egy m metódus A osztály példányait várja, akkor ha létrehozunk egy új B osztályt, ami az A osztályból származik, és a B példányait adjuk át az m metódusnak, akkor az m metódusnak helyesen kell működnie annak forráskódja módosítása nélkül! 2018. 11. 08. 16:44 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 19
SOLID Interface Segregation Principle Több, kliens specifikus interfész jobb, mint egy általános célú interfész. Ne legyen egy kliens se rákényszerítve arra, hogy olyan metódust implementáljon, amit nem használ! 2018. 11. 08. 16:44 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 20
SOLID Dependency Inversion Principle Nem konkrét implementációktól, hanem absztrakcióktól való függést építs a programba! A magas szintű modul implementációk ne az alacsony szintű modul implementációktól függjenek, hanem mindkettő absztrakcióktól függjön! Az absztrakciók ne a részletektől függjenek! A részletek függjenek az absztrakcióktól! 2018. 11. 08. 16:44 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 21
SOLID Dependency Inversion Principle 2018. 11. 08. 17:50 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 22
Clean code Robert C. Martin (2009) - Clean Code: A Handbook of Agile Software Craftsmanship Robert C. Martin (2011) - The Clean Coder: A Code of Conduct for Professional Programmers 2018. 11. 08. 18:03 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 23
Clean code Jelentőségteljes azonosítók szándék felfedő elnevezések (i firstelementindex) zavaró elnevezések kerülése (customerlist customers) kiejthető azonosítók választása (ymdhms dateofbirth) kereshető nevek (8 WORKING_HOURS_PER_DAY) kódolás elkerülése azonosítókban (iyear year) mental mapping elkerülése (a, b, c lowercasename) koncepciónként külön elnevezése (add, insert) megoldás domain elnevezések (TaskQueue, DirectoryVisitor) probléma domain elnevezések (ProductTrackRight) jelentőségteljes kontextus (Address (street, housenumber, city)) felesleges kontextus elkerülése (projektnév rövidítése minden osztály neve prefixeként) 2018. 11. 08. 21:10 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 24
Q&A 2018. 11. 08. 21:17 2018 A&K AKADÉMIA MINDEN JOG FENNTARTVA 25
https://ak-akademia.hu Köszönöm a = figyelmet();