Vaše jistota na trhu IT
OOP
v jazyku
Java
Rudolf Pecinovský
[email protected]
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
1
Předmět 4IT101 – Úvod do programování
► Rudolf Pecinovský
► Přednášky: http://vyuka.pecinovsky.cz/vse/101
► Konzultace:
● Vždy až po předchozí domluvě
● Út – Pá, 17:00 – 20:00,
● Kavčí Hory, Na Hřebenech II 1718/10
Metro Pražského povstání
● Podrobnosti (včetně GPS souřadnic) ISIS
► E-mail: [email protected]
► Tel: +420 603 33 00 90
► ICQ:
158-156-600
Jabber: [email protected]
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
2
Školní stránky související s kursem
► java.vse.cz
● Studijní informace (harmonogram, podmínky)
● Konvence, dokumentace a tutoriál k Javě (anglicky)
● Informace o navazujících kurzech a další
► isis.vse.cz
● Prezentace k přednáškám a cvičením
● Odevzdávání semestrálních prací
● Bodové hodnocení odevzdaných prací
► vyuka.pecinovsky.cz/vse/101
● Moje přednášky
● Některé doplňující informace
● Informace pro moje kroužky
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
3
Stránky s informacemi o Javě
► www.oracle.com/technetwork/java
● oficiální stránky Javy – v angličtině
► java.cz
● Pel-mel o Javě, převážně česky
► dione.zcu.cz/java/
● Řada česky psaných materiálů, avšak některé neaktualizované
► www.netbeans.org
● Seriál pro naprosté začátečníky (anglicky)
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
4
Učebnice ke kurzu
1/5
►OOP – Naučte se myslet a
programovat objektově,
Computer Press © 2010,
ISBN 978-80-251-2126-9.
►Učebnice pro středoškoláky
psaná jako rozhovor
►Soustředí se na to,
jak program navrhnout
● Není to učebnice jazyka,
jazyk je pouze nástroj
►První polovina plánovaného
dvoudílného kompletu
učícího OOA&D
Didinfo 2010
5
Učebnice ke kurzu
2/5
► Myslíme objektově v jazyku Java
► Vydala Grada, 2008
ISBN 978-80-247-2653-3
► Nepředpokládá žádné předchozí
programátorské znalosti
► Na rozdíl od ostatních učebnic
neučí hlavně syntaxi a knihovny,
učí především programování
► Nové vydání pokrývá celou látku
prvního semestru
► Pořadí jednotlivých témat je sice
trochu jiné, ale obsah zůstává
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
6
Učebnice ke kurzu
3/5
► J. Pavlíčková, L. Pavlíček:
Úvod do Javy
ISBN 80-245-0963-6
► Skriptum VŠE
► První část je
referenční příručka syntaxe
► Druhá část obsahuje vzorová
řešení předloňských
semestrálních prací
► Vyprodané, lze stáhnout na
http://java.vse.cz/4it101/Literatura
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
7
Učebnice ke kurzu
4/5
► Vydal Computer Press 2005,
ISBN 80-251-0615-2
► Podrobně vysvětluje
řadu konstrukcí, které jinde
podrobně česky vysvětlené
nenajdete:
● Parametrizované typy a
typové parametry
● Výčtové typy
● Anotace
● Kódování znaků
rozšířené sady Unicode
► Je vyprodaná, ale můžete si ji
legálně zdarma stáhnout
ve formátu PDF na adrese
http://knihy.pecinovsky.cz/java5novinky
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
8
Učebnice ke kurzu
4/5
►Návrhové vzory –
33 vzorových postupů pro
objektové programování,
Computer Press, © 2007,
ISBN 978-80-251-1582-4
►Učebnice návrhu programů
pro pokročilejší,
předpokládá znalosti zhruba
na úrovni modré učebnice
►Koncipovaná opět jako
rozhovor
Didinfo 2010
9
NEdoporučované učebnice
► OOP Objektově orientované
programování bez předchozích
znalostí – Průvodce pro samouky
► Předchozí znalosti bohužel
neměl ani autor
► Kniha učí OOP podle představ,
podle nichž se učilo před 20 lety, když
pravého ducha OOP mnozí vyučující ještě nechápali
► Bude-li někdo u zkoušky tvrdit to, co autor knihy,
bezpečně od zkoušky vyletí
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
10
Vaše jistota na trhu IT
Proč Java
27–37
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
11
Význam a funkce platformy
► Použitelnost SW je dána aktuální kombinací HW+OS
Aplikace
Platforma
Instrukční soubor
Dostupné funkce
HW
OS
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
12
Překlad × interpretace – charakteristika
► Zdrojový kód – textový soubor, v němž je program
zapsán v jazyku, kterému rozumí člověk
► Překlad
● Překladač převede zdrojový kód do binárního tvaru,
který je počítač schopen přímo provádět
● Přeložený program je pak schopen spustit přímo operační systém
► Interpretace
● Pro spuštění programu musí být v počítači interpret,
který čte zdrojový kód a rovnou jej provádí
► Hybridní přístup
● Program je sice přeložen, ale ne do jazyka počítače,
ale do jazyka předem známého interpretu který je optimalizován
● Pro maximální rychlost interpretace
● Pro JIT (Just In Time) Compiling – Program se překládá až při svém spuštění
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
13
Problémy překladu s platformami
► OS může zakrýt drobné odchylky HW, rozdílné OS
na stejném HW však definují různé platformy
► Velké aplikace běží často na několika platformách
● Každá rodina procesorů má vlastní instrukční soubor
● Různé počítače běží pod různými operačními systémy
► Překládaný program musí být přeložen a odladěn
pro danou platformu
► Při inovacích HW nebo OS je často nutno pořídit
také novou verzi příslušného programu
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
14
Překlad × interpretace – výhody
► Výhody překladu
● Rychlost
● Možnost lepšího naladění na konkrétní HW + OS
► Výhody interpretace
● Nezávislost na použité platformě – stačí vyvinout interpret
(překládané programy potřebují pro každou kombinaci HW+OS
znovu přeložit)
► Hybridně zpracovávané programy
● Překlad z jazyka do snadno interpretovatelného mezikódu
● Často opakované části mezikódu lze před provedením přeložit
● Interpret mezikódu bývá označován jako virtuální stroj
● Pro každou platformu stačí vyvinout virtuální stroj
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
15
Java = platformní nezávislost
► Java je programovací jazyk, ale také platforma
► Aplikace napsaná v Javě, může běžet na každé
HWOS platformě, pro níž je vyvinut virtuální stroj
► Inovace HW či OS doprovázené aktualizací VS
neovlivní chod provozovaných programů
Aplikace
Java
Java
Java
Java
Java
Java
Wind
Win
Win
Linux
Linux
MacOS
Intel
Intel
Alpha
Intel
Alpha
Apple
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
16
Platforma Javy – sestava
► Použitelnost programu je závislá
na implementaci platformy Javy
na dostupném HW+OS
► Platformu Javy definují
tři komponenty
● Použitý virtuální stroj
● Použité knihovny
Aplikace
Forth
Groovy
► Překladač jazyka přeloží program
do bajtkódu platformy Java
► Aplikace komunikuje se systémem
prostřednictvím knihovny
► Celý program interpretuje
virtuální stroj
VSE, 2009 © Rudolf Pecinovský
Java
Scala JRuby Jython
Knihovna
Virtuální stroj
Operační systém
Hardware
1. Základy OOP
P
L
A
T
F
O
R
M
A
J
A
V
Y
P
L
A
T
F
O
R
M
A
H
W
+
O
S
17
Platformy Javy – výčet
► Java SE (Standard Edition)
● Desktopové aplikace
My se omezíme na
Java SE
● Nadstavba nad JSE
● Velké distribuované aplikace
● Podporuje vícevrstvou architekturu
JavaCard
► Java EE (Enterprise Edition)
Java
ME
► Java ME (Micro Edition)
● Především v mobilních telefonech
● Zatím převážně hry, ale množí se
aplikace spolupracující se servery
► JavaCard
● Programování čipových karet
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
Java SE
Java EE
18
Rozšířenost programovacích jazyků 9/2011
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
19
Rozšířenost programovacích jazyků 9/2011
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
20
Výhody Javy pro výuku programování
► Jednoduchá (základy jazyka lze naučit za semestr)
● Jednodušší než C#, C++, Delphi, Visual Basic, …
► Čistá (neobsahuje sporné konstrukce)
► Objektově orientovaná
► Bezpečná (nabízí málo příležitostí k dělání chyb)
► Univerzální
● Používaná od čipových karet pro rozsáhlé distribuované aplikace
● Podporuje klíčové technologie: výjimky, paralelní procesy,
distribuované aplikace, webové aplikace
► Nezávislá na platformě
► Nejpoužívanější jazyk současnosti (firmy požadují její znalost)
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
21
Zajímavosti
Citáty
► Some people prefer other languages,
but that’s okay if you’re retarded I guess.
Eric Schmidt
► Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.
Martin Fowler, Refactoring
O Javě
► Lady Java:
techcrunch.com/2010/08/20/lady-java/
► Java4ever:
www.videacesky.cz/parodie-parody-youtube/java-navzdy-trailer
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
22
Vaše jistota na trhu IT
Vývojová a běhová prostředí
28
38–41
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
23
Prostředí JRE a JDK
► Pro Běh programů se používá JRE
(Java Runtime Environment – běhové prostředí Javy)
● Instalační soubory mají okolo 20 MB (záleží na cílovém OS)
● Instalace zabere (dle instalovaných vlastností) cca 100 MB
● Obsahuje virtuální stroj a standardní knihovny
● Umožňuje pouze spouštět hotové programy
► Pro vývoj se používá JDK (Java Development Kit)
● Obsahuje JRE + vývojové nástroje
● Instalační soubory verze 7 mají okolo 80 MB (dle cílového OS)
● Samostatně se stahuje dokumentace – dalších 58 MB
● Po instalaci zabere (dle instalovaných vlastností) 150 – 300 MB
● Rozbalená dokumentace zabere dalších 300 MB
● Rozbalené zdrojové soubory zaberou dalších 90 MB
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
24
Instalace JDK 6.0
► JDK 7:
http://www.oracle.com/technetwork/java/javase/downloads
/index-jsp-138363.html
● Stáhněte offline verzi – lépe se s ní pracuje
● Dokumentace se stahuje ze stejné adresy,
ale samostatně (je na stránce dole)
► Doporučuji neinstalovat do nabídnuté složky,
ale vytvořit složku Java pro všechny programy v Javě
● JDK instalovat ve Windows do složky C:\Java\JDK_7
● JRE instalovat ve Windows do složky C:\Java\JRE_7
● Smazané číslo revize umožňuje snadnější aktualizaci aniž by bylo třeba
rekonfigurovat programy
► Dokumentaci doporučuji instalovat do složky
C:\Java\JDK_7\docs
► Dokumentace ke standardní knihovně má pak kořen v souboru
C:\Java\JDK_7\docs\api\index.html
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
25
Vývojová prostředí
► Vývojové prostředí = sada nástrojů,
které mají maximálně usnadnit vývoj aplikací
► IDE – Integrated Development Environment
► V tomto semestru budeme používat prostředí BlueJ
● Vyvinuté speciálně pro výuku
● Lze se je kompletně naučit za 20 minut
(standardní IDE je složité asi jako celá Java)
● Nabízí možnost interaktivní komunikace s vytvořenými objekty –
to v klasických IDE nenajdete
● Automatizuje tvorbu některých tříd interaktivní metodou
podobnou metodě tvorby maker v programech MS Office
● Umožňuje od samého počátku výuky nahlížet na projekt
také z hlediska architektury a ne jenom z hlediska kódu
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
26
Instalace BlueJ
► BlueJ 3.0.5:
http://www.bluej.org/download/download.html
► Předkonfigurovaný lokalizovaný systém na mých stránkách
http://vyuka.pecinovsky.cz/bluej_config
► Samostatná lokalizace BlueJ a dodatečná konfigurace:
http://vyuka.pecinovsky.cz/bluej_config
● Zde je i návod jak vše instalovat
► Třetí možnost jsou školní stránky,
avšak na nich je systém konfigurovaný trochu jinak
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
27
Další vývojová prostředí
► NetBeans
● Vyvíjené pod patronací firmy Sun v Praze
(Sun je koupil od české firmy, která je vyvinula)
● Lze je stáhnout na adrese http://www.netbeans.org/downloads
● Instalační soubory verze určené pouze pro Java SE mají 67 MB
● Plná verze včetně Java ME, Java EE, UML, C++, PHP, Ruby,
obsahující i Tomcat a GlassFish má cca 250 MB
► Eclipse
● Vývoj iniciovala firma IBM
● Jeho vzhled je bližší nativním okenním aplikacím
● Lze je stáhnout na adrese http://www.eclipse.org/downloads
● Instalační soubory verze 3.7.1 Indigo mají v základní verzi 131 MB,
ale je k nim třeba doinstalovat ještě nějaké pluginy
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
28
Vaše jistota na trhu IT
Ohlédnutí do historie
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
29
Historické mezníky programování
► 1843 – První programy – Charles Babbage, Lady Lovelance
► 1941 – První fungující samočinný počítač (Zuse – Německo)
► 1946 – První programovací jazyk Plankalkül (Konrad Zuse)
► 1947 – ENIAC a von Neumannova architektura
(Maďar s německým jménem žijící v USA)
► 1957 – První implementovaný programovací jazyk FORTRAN
► 1967 – První objektově orientovaný jazyk: Simula 67
► 1968 – Dijkstra: Go To Statement Considered Harmful
► 1970 – Programovací jazyk Pascal
– Start projektu Smalltalk
– Programovací jazyk C
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
30
Historické mezníky OOP
► 1967 – Jazyk Simula 67 – zavedl základní myšlenky
► 1980 – Zveřejnění jazyka Smalltalk 80 (start 1970)
● Jazyk, který dotáhl myšlenky OOP
● Doposud používán, často považován za „nejobjektovější“ jazyk
► 1985 – Vydána první verze jazyka C++ (start 1979)
● Rozšířil myšlenky OOP mezi programátory
● Stále jeden z nejrozšířenějších jazyků
► 1995 – Zveřejněn jazyk Java (start 1991)
● Nejrozšířenější jazyk současnosti
● 1999 – Platformy JavaCard, J2ME, J2SE, J2EE
● 2004 – Java 5.0 – nejvýraznější rozšíření syntaxe
► 2002 – .NET jako reakce na obrovský úspěch J2EE
– Jazyky C#, Visual Basic .NET, časem J#
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
31
Historické mezníky posledních 25 let
1980 – Nástup mikropočítačů, o programování
se začínají zajímat masy nadšenců
– Pod vlivem OO jazyků se narodil jazyk C++
1985 – C++ nastupuje svoji vítěznou dráhu světem
– OOP začíná stále silněji pronikat do praxe,
často je však implementováno špatně
(a mnozí jej takto špatně učí dodnes)
1990 – Přibývá textů vysvětlujících rozdíl mezi
prostým používáním tříd a skutečným OOP
1995 – Vyšla kniha Design Patterns, nastartovala celé hnutí
– Narodil se současný nejpoužívanější jazyk Java
2000 – Metodika Object First
2005 – Metodika Design Patterns First
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
32
Vaše jistota na trhu IT
Quo vadis programování?
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
33
Programování se vyvíjí (1/3)
Dříve
Nyní
Řada běžných,
často se vyskytujících úloh
stále čekala na vyřešení
Většina běžných úloh je vyřešena
a řešení jsou dostupná
v komponentách či knihovnách
Programy pracovaly samostatně,
navzájem příliš nespolupracovaly
Nové program jsou téměř vždy součástí
rozsáhlejších aplikací a rámců
Klíčovou úlohou programátora
byl návrh algoritmů
a základních datových struktur
Důležitější než znalost algoritmů je
znalost knihoven a aplikačních rámců,
v nichž jsou potřebné algoritmy
a datové struktury připraveny
Klíčovou úlohou je
návrh architektury systému
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
34
Programování se vyvíjí (2/3)
Nyní
Dříve
Metodika vývoje programů
počítala s pevným zadáním
Zadání většiny vyvíjených projektů
se v průběhu vývoje neustále mění
Zákazníci hledali firmu,
která jejich projekt naprogramuje
Programátorské firmy hledají zákazníky,
kteří si u nich objednají tvorbu projektu
O výsledné podobě projektu
rozhoduje zákazník
O výsledné podobě projektu
rozhodovali analytici a programátoři
Při vývoji programů se kladla váha
především na jejich efektivitu
U programátorů byla oceňována
jejich schopnost vyvíjet programy,
s malými HW požadavky
VSE, 2009 © Rudolf Pecinovský
Při vývoji programů se klade váha
především na jejich spravovatelnost
a modifikovatelnost
U programátorů je oceňována
jejich schopnost vyvíjet programy,
které je možno rychle a levně přizpůsobovat
neustále se měnícím požadavkům zákazníka
1. Základy OOP
35
Programování se vyvíjí (3/3)
Nyní
Dříve
Prvotní úlohou programátora
bylo vymyslet, jak úkol vyřešit
Prvotní úlohou programátora je zjistit,
jestli už někde není problém vyřešen
Testy se většinou navrhovaly
po dokončení projektu či jeho části
a spouštěly se na závěr
před odevzdáním projektu (byl-li čas)
Testy se většinou navrhují
před začátkem vývoje každé části
a spouští se v průběhu celého vývoje
po každé drobné změně
Testy navrhovali programátoři
a ověřovali v nich, že program dělá to,
co chtěl programátor naprogramovat
Testy se navrhují
ve spolupráci se zákazníkem
a ověřuje se v nich, že program dělá to,
do po něm zákazník požadoval
Návrh testů byl interní záležitostí
vývojového týmu
Návrh testů se často stává
součástí smlouvy o vývoji programu
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
36
Shrnutí
► Doba programován jako umění skončila,
nastupuje programování jako technologie
► Chceme-li si programováním vydělávat,
musíme umět programovat tak,
abychom se naše výtvory dobře prodávali
► Nejsme-li schopni vyhovět s rozumnou rychlostí a cenou
požadavkům zákazníka, najde si vstřícnějšího dodavatele
► Všechny důležité (a dobře placené) projekty
jsou nyní vyvíjeny s využitím OOP a návrhových vzorů =>
budou-li se chtít studenti dobře uplatnit v praxi,
budou se muset naučit OOP a návrhové vzory
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
37
Priority současného programování
► Funkčnost
► Robustnosti
► Modifikovatelnost
● Srozumitelnost
● Vstřícnost ke změnám
► Spravovatelnost
► Znovupoužitelnost
► Dosahování těchto cílů výrazně napomáhá
používání návrhových vzorů
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
38
Vaše jistota na trhu IT
Objektově orientované
programování
11–15
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
31–33
50–53
39
Základní idea OOP: Všechno je objekt
► Simula67 byla vyvinuta jako jazyk pro programování simulací
► Později chytrým došlo:
Každý program je simulací reálného či virtuálního světa
► Ve světě lze vše považovat za objekt =>
má-li být simulace přesná, musí umět s objekty pracovat
► Myšlenku, že vše je objekt, OOP rozšiřuje na vše,
co můžeme označit podstatným jménem …
► => jako objekt jsou v OO programech zpracovávány i
● vlastnosti (velikost, barva, směr, …)
● děje (spojení, komunikace, výpočet, …)
● události (spuštění, přerušení, ukončení, …)
●…
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
40
Zprávy
► V reálném světě jsou všechny děje důsledkem toho,
že spolu objekty navzájem interagují –
jeden objekt působí na druhý a ten na to reaguje
► Interakce objektů se v OO programech
simuluje zasíláním zpráv
● Židle zašle podlaze zprávu o své váze,
podlaha ji odpoví, jestli ji unese
► Část kódu definující reakci objektu na zaslanou zprávu
nazýváme metoda
► Analogie s telefonem
● Mohu poslat zprávu (SMS, MMS, e-mail, …) jen tomu, na koho mám číslo
● Mohu posílat různé zprávy
● Reakce různých lidí na stejnou zprávu mohou být různé
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
41
Třídy a jejich instance
► V některých OO jazycích sdružujeme objekty
s podobnými vlastnostmi do tříd
► Příslušnost objektu do třídy vyjadřujeme tvrzením,
že objekt je instancí dané třídy
(termíny objekt a instance jsou synonyma)
► Třída je zvláštní druh objektu,
který umí na požádání vytvořit svoji instanci
(třída je „továrna“ na vytváření svých instancí)
► Třída = zobecněný klasický datový typ
● Vedle množiny hodnot definuje i
množinu přípustných operací nad těmito hodnotami
● Jinými slovy: Třída definuje vlastnosti a schopnosti svých instancí
● Všechno je objekt => i třída je objekt
► Příklad:
● Auto = třída představující obecné auto
● Moje auto, sousedovo auto a každé další auto jsou její instance
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
42
Základní pilíře OOP
► Zapouzdření (kód je pohromadě se zpracovávanými daty)
● Skrývání implementace
(nikdo nemá mít šanci zjistit, jak je program implementován)
● Zvýšení bezpečnosti a robustnosti (nemožnost nekorektního použití)
● Usnadnění budoucích modifikací
► Identita
● Každá zpráva musí mít svého adresáta, nelze ji posla „do prostoru“
● Objekt sám rozhodne, jak na zprávu zareaguje
● Důsledek: polymorfizmus – operativní změna typu za chodu
programu
(nyní jsem číšník, za chvíli budu obsluhovaný host)
► Skládání
● Objekt může obsahovat jiné objekty
● Dědičnost – speciální případ, při němž s objektem převezmu i jeho
rozhraní
● Omezuje duplicity v kódu
● Nebezpečí špatného použití (narušuje zapouzdření)
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
43
Návrhové vzory – Design Patterns
► Programátorský ekvivalent matematických vzorečků
ax  bx  c  0
2
x1 , 2 
b
b  4 ac
2
2a
► Výhody:
● Zrychlují návrh (řešení se nevymýšlí, ale jenom použije)
● Zjednodušují a zpřesňují komunikaci mezi členy týmu
(větou, že diskriminant je záporný, řeknu znalým jednoduše
řadu věcí, které bych musel jinak složitě vysvětlovat)
● Zkvalitňují návrh
● Jsou ověřené, takže výrazně snižují pravděpodobnost potenciálních chyb
typu na něco jsme zapomněli
► Znalost návrhových vzorů patří k povinné výbavě
současného objektově orientovaného programátora
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
44
Strukturovaný versus OO program
► Strukturovaný program „=“ posloupnost příkazů
● Analýza: vymýšlejí se postupy
● Stavební kameny: procedury/funkce; (proměnné)
● Výsledek: většinou samostatný program
● Vedlejší cíle: efektivita
► Objektově orientovaný program =
množina objektů, které si posílají zprávy
● Analýza: definují se účastníci a jejich spolupráce
● Stavební kameny: třídy a objekty
● Výsledek: velmi často komponenta, služba či jiná část celku
● Vedlejší cíle: přehlednost, modifikovatelnost, znovupoužitelnost
► OOP vyžaduje výrazně jiný způsob uvažování
než klasické strukturované programování
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
45
Výhody objektové orientace
► Zmenšuje sémantickou mezeru
● Přibližuje vyjadřování programátora vyjadřování zákazníka
► Dovoluje lépe zvládat obludné projekty
● Rozkládá celý problém na menší, mentálně uchopitelné části
● Umožňuje snáze spravovat vzájemnou spolupráci těchto částí
► Vyšší stabilita kódu
● Umožňuje zapouzdření kódu spolu s daty nad nimiž kód pracuje
● Dokáže program zabezpečit proti řadě dříve běžných chyb
► Výrazně levnější a snazší údržba kódu
● Umožňuje program předem připravit na změny zadání
► Snazší příprava znovupoužitelného kódu
► V současné době je OOP jedinou akceptovanou technologií
pro vývoj kritických programů
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
46
Metodika Design Patterns First
► Jiný způsob myšlení vyžadovaný OOP dělá někdy problémy těm,
kteří již programovali strukturovaně
● Musí se nejprve odnaučit mnohé z toho, na co jsou zvyklí
● Programy dříve považované za ukázkové,
se občas stávají ukázkami toho, jak se to nemá dělat
► To, co je třeba dostat co nejhlouběji „pod kůži“,
tj. způsob myšlení, je třeba učit od samého počátku
● Jiný způsob myšlení při návrhu programu
● Třídy, objekty a práce s nimi
● Rozhraní
● Návrhové vzory
► Metodika Design Patterns First
● Začíná s výukou klíčových dovedností
● Další zařazuje až tehdy, když jsou pro řešení úloh potřebné
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
47
Vaše jistota na trhu IT
Třídy a objekty
v interaktivním režimu
50–93
114–119
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
48
Diagram tříd v BlueJ
► BlueJ usnadňuje koncepční pohled
na řešený problém, primárně
ukazuje jeho diagram tříd
► Každá třída je
představována obdélníkem
► Název třídy je
v horní částí obdélníku
► Šipky mezi třídami oznamují, že
třída, od níž vede šipka, závisí na
třídě, ke které vede šipka
► Šrafování označuje, že třída není
dosud přeložena
► V BlueJ si můžeme zahrát
na část programu a sami posílat
zprávy třídám a jejich instancím
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
49
Soubory na disku podle přípon
Soubory, jejichž smazání vede narušení projektu
► *.java – zdrojové soubory
► bluej.pkg a package.bluej – služební soubory BlueJ
● Obsahuje informace o diagramu tříd (umístění, uspořádání, vazby, …)
● Soubor bluej.pkg byl používán do verze 2.2.1,
● Od verze 2.5.0 se kvůli asociaci používá soubor package.bluej
Soubory, které se při každém překladu vytvoří znovu
► *.class – přeložené soubory
● Každý datový typ má vlastní přeložený soubor
► *.ctxt – služební soubory BlueJ
● Obsahuje informace, které jsou následně zobrazovány
v dialogových oknech volaných metod
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
50
Zaslání zprávy třídě
► V BlueJ lze v interaktivním
režimu zaslat zprávu objektu
zadáním příkazu
z jeho místní nabídky
► Zprávy třídě začínající new
požadují vytvoření instance
(vyvolávají konstruktor)
► První (u new druhé) slovo
příkazu říká, co objekt po
zaslání dané zprávy vrátí
► V závorkách za názvem zprávy
je seznam upřesňujících
parametrů dané zprávy
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
51
Vytvoření instance
► V Javě můžeme komunikovat
s instancí pouze prostřednictvím
odkazu na ni
► Před vytvořením instance
se BlueJ zeptá na název odkazu
na tuto instanci – na její
identifikátor
► Zástupce odkazu na vytvořenou
instanci umístí do zásobníku
odkazů a označí jej zadaným
názvem spolu s názvem její třídy
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
52
Pravidla pro tvorbu identifikátorů
► Termín identifikátor se používá pro označení názvu čehokoliv v
program (identifikuje ono „cokoliv“)
► Smí obsahovat písmena, číslice a znaky _ a $
● Znak $ raději nepoužívat
● Písmenem se rozumí jakýkoliv znak, který je v sadě UNICODE označen
jako písmeno (včetně japonštiny & spol.)
► Nesmí začínat číslicí
► Nesmí být shodné s některým z klíčových slov ani s názvem
některé z předdefinovaných konstant true, fale a null
► Java respektuje velikost znaků,
identifikátory ahoj, Ahoj a AHOJ jsou různé
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
53
Klíčová slova
abstract
continue
for
new
switch
assert
default
if
package
synchronized
boolean
do
goto
private
this
break
double
implements
protected
throw
byte
else
import
public
throws
case
enum
instanceof
return
transient
catch
extends
int
short
try
char
final
interface
static
void
class
finally
long
strictfp
volatile
const
float
native
super
while
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
54
Konvence pro tvorbu identifikátorů
Jednotlivé entity jsme ještě neprobírali, ale chci, aby vše o identifikátorech
bylo pohromadě. V průběhu kurzu se budu k těmto konvencím vracet
► Velbloudí notace (každé další slovo víceslovného názvu začíná
velkým písmenem MojeSkvěláTřída, mojeSkvěláMetoda)
► Názvy tříd začínají velkým písmenem (MojeTřída)
► Názvy proměnných a metod začínají malým písmenem
(mojeMetoda, mojeProměnná)
► Názvy konstant obsahují jen velká písmena, slova odděluje znak
podtržení (MOJE_KONSTANTA)
► Názvy balíčků obsahují jen malá písmena, oddělování slov není
specifikováno (můjbalíček, můj_balíček)
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
55
Interaktivní zasílání zpráv instancím
► Stejně jako třídám lze zprávy
posílat i vytvořeným instancím
► Instanci pošleme zprávu zadáním
příkazu z místní nabídky
jejího odkazu
► Bude-li to zpráva s parametry,
otevře BlueJ dialogové okno,
v němž uživatel zadá
jejich hodnoty
► Bude-li zpráva něco vracet,
otevře na závěr dialogové okno
s výsledkem
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
56
Animované ukázky
► Ve složce I:\!RUP\Animace
Na webu http://vyuka.pecinovsky.cz/animace
► Česky komentované animace
● A01_1_Projekty_BlueJ.htm
● A01_2_Slozka_projektu.htm
● A02_1_BlueJ_Interakce.htm
► Anglicky komentované animace
● OOTiJ_A_001a_Animations.htm
● OOTiJ_A_001c_IDE_BlueJ.htm
● OOTiJ_A_002a_Compilation.htm
● OOTiJ_A_003a_FirstInstances.htm
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
57
Vaše jistota na trhu IT
Testovací třídy
50–93
114–119
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
58
Vývoj řízený testy
► TDD = Test Driven Development
► Nejprve vytvořit testy, teprve pak testovaný program
► Zásady
● Při počátečním návrhu testů programátor definuje testy,
které prověřují co má testovaná entita (třída, metoda) umět
● (Při návrhu testů po vytvoření entity programátor většinou netestuje to,
co má entita umět, ale to, co naprogramoval)
● Cílem následného vývoje je pak již pouze dosažení toho,
aby připravené testy prošly
► Výhody
● Výrazný nárůst produktivity
● Neméně výrazný nárůst spolehlivosti výsledných programů
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
59
Jednotkové testy a knihovna JUnit
► Jednotkové testy (Unit tests) jsou testy programových jednotek
► Jednotkou bývá většinou třída, ale mohu to být i větší celky
► Pro tvorbu automaticky vyhodnocovaných jednotkových testů se
nejčastěji používá knihovna JUnit nebo její odvozeniny
► Všechna „lepší“ vývojová prostředí mají zabudovanou
podporu knihovny JUnit
► Většinou bývá stejná sada objektů testována z různých pohledů;
JUnit proto zavádí následující technologii:
● Testovaná sada objektů označovaná jako testovací přípravek
je připravena samostatně
● Testovací přípravek je nahrán před spuštěním každého testu;
test pak pouze prověřuje chování objektů z přípravku
● Pro každý testovací přípravek musí být vytvořena samostatná testovací
třída s testy objektů z tohoto přípravku
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
60
Testovací třídy v BlueJ
1/2
► S vytvořením testovací třídy je nám BlueJ ochoten pomoci
● My mu ukážeme, co má třída umět, on ji naprogramuje
● Používá se podobný mechanizmus jako při deklarování maker
v různých kancelářských programech
► Testovací přípravek
● Kód vytvářející testovací přípravek je pro všechny testy dané třídy
společný, a proto se definuje zvlášť
● BlueJ zaznamenává všechny akce od posledního restartu VM
● Na požádání pak vše zapíše do metody vytvářející přípravek
● BlueJ umožňuje spustit tento kód nezávisle a získat tak přípravek
► Testy
● Pro start záznamu dalšího testu je speciální příkaz
● Po zadání příkazu se nejprve vytvoří přípravek a pak začne záznam
► Zprávy posílané testovací třídě žádají spuštění testu
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
61
Testovací třídy v BlueJ
2/2
► Tvorba přípravku
Po restartu postupně
předvedeme, jak se má
přípravek vytvářet a na konci
zadáme příkaz Dosavadní
činnost -> Testovací přípravek
► Přípravek můžeme
kdykoliv upravit
► Tvorba testu
Po zadání příkazu
Vytvořit testovací metodu
se automaticky zavede
přípravek, který pak budeme
testovat
► Testy není možno upravit,
musí se nahrát znovu
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
62
Vaše jistota na trhu IT
Zprávy s parametry a
návratovou hodnotou
50–93
114–119
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
63
Zprávy s parametry
► Při zasílání některých
zpráv je možno zadat
upřesňující parametry
► Jako parametry se
zadávají hodnoty, na
jejichž základě objekt
modifikuje svoji
reakci na zprávu
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
64
Datové typy
► Veškerá data, s nimiž chceme v programu v Javě pracovat,
musí mít předem určen svůj datový typ, který definuje,
co jsou příslušná data zač
► Java dělí datové typy do dvou skupin
● Typ-netyp void
● Primitivní datové typy – pouze 8 zástupců:
boolean, byte, short, int, long, float, double, char,
● Objektové datové typy – vše ostatní
(ve standardní knihovně Javy 6.0 je definováno přes 18 000
datových typů, z toho je 3777 veřejných)
► Při práci s daty musíme používat data deklarovaného typu nebo
typů s ním kompatibilních
► Při práci s hodnotami objektových typů dostane v Javě
(a obecně ve všech moderních programovacích jazycích)
žadatel vždy pouze odkaz na daný objekt
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
65
Parametry – použití
► Typ hodnoty
parametru musí
přesně odpovídat
deklarovanému typu
daného parametru
► Pořadí předávání
hodnot parametrů
musí dodržovat pořadí
jejich deklarace
► Jako hodnoty
parametrů
objektových typů
se předávají odkazy na
instance těchto typů
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
66
Ukázky práce v interaktivním režimu
► Ve složce I:\!RUP\Animace
Na webu http://vyuka.pecinovsky.cz/animace
► Česky komentované animace
● A02_2_Testovaci_trida.htm
► Anglicky komentované animace
● OOTiJ_A_004a_Test_Class.htm
● OOTiJ_A_005a_MsgWithReturnValues.htm
● OOTiJ_A_005b_MsgReturningObject.htm
● OOTiJ_A_006a_MsgWithParameters.htm
● OOTiJ_A_006b_ObjectParameters.htm
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
67
Vaše jistota na trhu IT
Děkuji za pozornost
►Rudolf Pecinovský
http://vyuka.pecinovsky.cz/vse
mail: [email protected]
ICQ: 158 156 600
VSE, 2009 © Rudolf Pecinovský
1. Základy OOP
68
Descargar

Nadpis