26
Java best practices A&K AKADÉMIA MARKOS ANDRÁS HTTPS://AK-AKADEMIA.HU

Java best practices - ak-akademia.hu · J2SE 1.2 Playground 1998.12.04. J2SE 1.2.1 1999.03.30. ... A magas szintű modul implementációk ne az alacsony szintű modul implementációktól

  • Upload
    vanthu

  • View
    221

  • Download
    0

Embed Size (px)

Citation preview

Java best practicesA&K AKADÉMIA

MARKOS ANDRÁS

HTTPS://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

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

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 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

Q&A

2018. 11. 08. 21:17 © 2018 A&K AKADÉMIA – MINDEN JOG FENNTARTVA 25

Köszönöm a = figyelmet();

https://ak-akademia.hu