Java best practices A&K AKADÉMIA MARKOS ANDRÁS

Hasonló dokumentumok
Java Programozó képzés A&K AKADÉMIA 2019.

I. Bevezetés. 1. ábra A Java "logója"

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Java I. A Java programozási nyelv

Programozási nyelvek JAVA EA+GY 1. gyakolat

Java 9 alkalmazás architektúra

Java I. A Java programozási nyelv

Java. JIT (Just in Time) fordítók alkalmazása, optimalizálás AOT (Ahead of Time) fordítók alkalmazásának lehetősége

Programozási nyelv Java

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Junior Java Képzés. Tematika

AZ OBJEKTUM-ORIENTÁLT TERVEZÉSI ALAPELVEK KRITIKAI VIZSGÁLATA

Bevezetés, platformok. Léczfalvy Ádám

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozási technológia I.

Szoftverfejlesztés teszteléssel

A NYELV NEVE. Kezdetben: Oak. James Gosling. Java: Sun Mycrosystems védjegyev

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Hova tovább Android? OpenJDK és további várható újdonságok.

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

Több app. Egy kódbázis

Osztott alkalmazások fejlesztési technológiái Áttekintés

Szoftvertechnológia alapjai Java előadások

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

Objektumorientált programozás. Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Flex: csak rugalmasan!

Informatikai Tesztek Katalógus

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

iphone és Android két jó barát...

Hello World. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 1. Bedők Dávid v0.3

Webes alkalmazások fejlesztése

Informatikai alkalmazások - levelező

JAVA webes alkalmazások

Verifikáció és validáció Általános bevezető

Alkalmazások Fejlesztése J A V A K Ó D O L Á S I K O N V E N C I Ó K P R O G R A M T E R V E Z É S I J Ó T A N Á C S O K

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Az MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

A Java EE 5 plattform

Programozási nyelvek Java

A Java programozási nyelv

*#Discount~ Kaspersky Internet Security - multidevice 2015 best software to buy for mac ]

Kinek szól a könyv? Hogyan épül fel a könyv? Megjelenés előtti szoftver A hálózati kézikönyv tartalma A könyv támogatása Kérdések és megjegyzések

Adatbázis és szoftverfejlesztés elmélet

Bevezetés. Dr. Iványi Péter

Miért ASP.NET? Egyszerű webes alkalmazás fejlesztése. Történet ASP ASP.NET. Működés. Készítette: Simon Nándor

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

Közösség, projektek, IDE

Programozási technológia 2.

Ismerkedés a Python programnyelvvel. és annak micropython változatával

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Programozási technológia I 1. gyakorlat. A Java nyelvi alapjai, a NetBeans környezet

Symantec Endpoint Protection

Bevezetés a Python programozási nyelvbe

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

A Java nyelv bemutatása

Vizuális, eseményvezérelt programozás X. V 1.0

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

A NetBeans IDE Ubuntu Linux operációs rendszeren

Programzás I gyakorlat

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Linux alapok és használatuk

JAVA nyelvi alapok. Adatbányászati technikák (VISZM185) Dávid István

The Power To Develop. i Develop

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Windows Server 2012: a felhő OS

Az Oracle Fusion szakértői szemmel

BBS-INFO Kiadó

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

STANDARD DEVELOPMENT U.L. FACTORY SYSTEMS GROUP IT DEPARTMENT

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05+ Geodéziai Feldolgozó Program

Nyílt forráskódú irodai programkomponensek vállalati környezetbe való integrációjának vizsgálata és implementációja

C++ fejlesztés az ECLIPSE környezetben

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

IBM Tivoli Access Manager for WebLogic Server Felhasználóikézikönyv. 3.9-es verzió GC

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

Novell Vibe OnPrem 3. 1 A termék áttekintése. Novell december 08.

.NET Microsoft.Net Framework

GNU/Linux alapok és alkalmazásuk

Mobil készülékek programozása

RIA Rich Internet Application

Cloud computing. Cloud computing. Dr. Bakonyi Péter.

Reaktív programozás szerver oldalon

Kommunikációs rendszerek teljesítőképesség-vizsgálata

OOP és UML Áttekintés

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

A Skype architektúrája. P2P hálózat Supernode ok, peer-ek, login server

Java programozási nyelv 11. rész Adatbázis-programozás

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Cloud computing Dr. Bakonyi Péter.

Bevezetés az SAP világába

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

A TANTÁRGY ADATLAPJA

Webes alkalmazások fejlesztése. Bevezetés az ASP.NET MVC 5 keretrendszerbe

Dr. Sipos Marianna ZMNE BJKMK

Átírás:

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();