Upload
vanthu
View
221
Download
0
Embed Size (px)
Citation preview
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
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
2018. 11. 08. 16:28 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 5
Verzió Kódnév Kiadási dátumJDK 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.
Java népszerűsége2018 áprilisi TIOBE index alapján
2018. 11. 08. 16:28 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 6
Helyezés Programozási nyelv Arány1 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%
Java működése
Java forráskód (.java)
javac fordító
bájtkód (.class)
JVM
Windows
JVM
Linux
JVM
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éseVerzió Új nyelvi elemek Kiadási dátum
Java 12 • raw String• switch expressions• microbenchmark suite
2019.03.
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
2018.09.25.
2018. 11. 08. 16:28 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 9
Új nyelvi elemek áttekintéseVerzió Ú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ő
2018.03.20.
Java 9 • modul rendszer• Collection factory metódusok• JShell: Java REPL• privát interfész metódusok
2017.09.21.
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
2014.03.18.
2018. 11. 08. 16:28 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 10
Új nyelvi elemek áttekintéseVerzió Ú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
2006.12.11.
Java 5 • generics• enum• Executor Framework
2004.09.29.
2018. 11. 08. 16:28 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 11
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 PrincipleEgy 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 PrincipleA 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 PrincipleLiskov 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 PrincipleTöbb, kliens specifikus interfész jobb, mint egy általános célú interfész.
2018. 11. 08. 16:44 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 20
Ne legyen egy kliens se rákényszerítve arra, hogy olyan metódust implementáljon, amit nem használ!
SOLID – Dependency Inversion PrincipleNem 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
2018. 11. 08. 18:03 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 23
Robert C. Martin (2009) - Clean Code: A Handbook of Agile Software CraftsmanshipRobert C. Martin (2011) - The Clean Coder: A Code of Conduct for Professional Programmers
Clean codeJelentő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