Modelowanie_Wyklad1

February 12, 2019 | Author: Wojciech Niśkiewicz | Category: Computer Programming, Software Engineering, Software Development, Areas Of Computer Science, Technology
Share Embed Donate


Short Description

Download Modelowanie_Wyklad1...

Description

Podstawy modelowania programów — Wykład 1 dr inż. Łukasz Hładowski ∗

Łukasz Hłado Hładowski wski



Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski

Zasady poprawnego pisania programów

1 2 3 4 5 6 7 8

Sensowne nazwy funkcji i zmiennych Wartości domyślne Poprawne tworzenie obiektów Gettery i settery Wyjątki Dziedziczen Dziedziczenie ie vs. instanceof Zależności między klasami Przedwczesna optymalizacja

Łukasz Hłado Hładowski wski

Zasady poprawnego pisania programów

1 2 3 4 5 6 7 8

Sensowne nazwy funkcji i zmiennych Wartości domyślne Poprawne tworzenie obiektów Gettery i settery Wyjątki Dziedziczen Dziedziczenie ie vs. instanceof Zależności między klasami Przedwczesna optymalizacja

Łukasz Hłado Hładowski wski

Sensowne nazwy funkcji i zmiennych

1 2 3 4 5 6 7 8

p ub u b li l i c s ta t a ti t i c v oi o i d m ai a i n ( S tr t r in i n g [ ] a rg rg s ) { int l = 2 ; int o = 3 ; int O = - 1 ; f o r ( i n t i = 0 ; i < l +2 + 2 * 0 + 3 ; i ++ ++ ){ System.out.print(l+i+1+l-1*O*o+l*O); S y s t e m . o u t . p r i n t l n (" ( " ) b le l e dz d z ik ik " ); S y s t e m . o u t . p r i n t l n (" ( " . .. . . p o pr p r a wi w i o ny ny " ); } }

Co się wypisze?

Łukasz Hłado Hładowski wski

Rozwiązanie

1 2 3 4 5 6 7 8 9 10

6) b l ed z ik . .. p o pr a wi o ny 7) b l ed z ik . .. p o pr a wi o ny 8) b l ed z ik . .. p o pr a wi o ny 9) b l ed z ik . .. p o pr a wi o ny 1 0) b l ed z ik . .. p o pr a wi o ny

Łukasz Hładowski

Sensowne nazwy funkcji i zmiennych

1 2 3 4 5 6 7

p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int x = 2 ; int y = 3 ; int p = - 1 ; for ( int q = 0; q < x +2* 0+ 3; q ++) System.out.print(x+q+1+x-1*p*y+x*p); S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); }

Czy teraz nie jest trochę łatwiej?

Łukasz Hładowski

Rozwiązanie

1 2

6 7 89 1 0) b l ed zi k . .. p o pr a wi o ny

Łukasz Hładowski

’Ukochane’ nazwy... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

p ub l ic c la ss Main { s ta t ic i nt x ; p ub li c s ta ti c v oi d f ( ) { if ( ++ x = =1 ) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } else { S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); } } p ub li c s ta ti c v oi d f ( int x ){ f (); Sys tem . out . print ( x ); } p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int x =0; f ( x ); f (); } }

A teraz co?

Łukasz Hładowski

Rozwiązanie

1 2

) b le dz ik 0 .. . p o pr a wi o ny

Czy można poprawić ten kod?

Łukasz Hładowski

Refaktoryzacja 1 — zmiana nazw i wart. pocz. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

p ub l ic c la ss Main { s ta t ic i nt L i c z b a W y s w i e t l e n = 0 ; / * o c z y w i s t e ! * / p ub li c s ta ti c v oi d W y s w i e t l T e k s t ( ) { if ( ++ L i c zb a W ys w i et l e n = = 1) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } else { S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); } p ub li c s ta ti c v oi d W y s w i e t l L i c z b e (int l i c z b a ) { WyswietlTekst(); System.out.print(liczba); } p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; WyswietlLiczbe(liczba); WyswietlTekst();}}

Nadal źle, ale chociaż trochę czytelniej... Łukasz Hładowski

Refaktoryzacja 2 — wyrzucenie funkcji poza WyswietlLiczbe 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

WyswietlTekst

p ub l ic c la ss Main { s ta t ic i nt L i cz b aW ys w ie t le n = 0; p ub li c s ta ti c v oi d W y s w i e t l T e k s t ( ) { if ( ++ L i c zb a W ys w i et l e n = = 1) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } else { S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); } p ub li c s ta ti c v oi d W y s w i e t l L i c z b e (int l i c z b a ) { System.out.print(liczba); }/*USUNIĘTA*/ p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; WyswietlTekst(); /*DODANA*/ WyswietlLiczbe(liczba); W y sw i e tl T ek s t ( ) ; } }

Łukasz Hładowski

Wynik 1 2 3 4 5 6 7 8 9 10 11 12

p ub l ic c la ss Main { s ta t ic i nt L i cz b aW ys w ie t le n = 0; p ub li c s ta ti c v oi d W y s w i e t l T e k s t ( ) { if ( ++ L i c zb a W ys w i et l e n = = 1) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } else { S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); } p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; WyswietlTekst(); System.out.print(liczba); W y sw i e tl T ek s t ( ) ; } } WyswietlTekst

Łukasz Hładowski

jest trudna! Upraszczamy...

Refaktoryzacja 3 — funkcja

1 2 3 4 5 6 7 8 9

WyswietlTekst

[...] p ub li c s ta ti c v oi d W y s w i e t l T e k s t ( ) { if ( ++ L i c zb a W ys w i et l e n = = 1) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } else { S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); } } [...]

Co zrobić z tym

Łukasz Hładowski

++LiczbaWyswietlen?

Refaktoryzacja 3a — zastępujemy równoważnym 1 2 3 4 5 6 7 8 9 10

++x

kodem

[...] p ub li c s ta ti c v oi d W y s w i e t l T e k s t ( ) { LiczbaWyswietlen++; if ( L i c z b aW y sw i e tl e n = = 1) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } else { S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); } } [...]

... nie zawsze to będzie dobry wybór... Łukasz Hładowski

Refaktoryzacja 3b — upraszczamy if (LiczbaWyswietlen==1) kodem równoważnym p ub l ic s ta t ic b o ol ea n C z y Pi e r ws z e Wy s w ie t l en i e ( ) { 2 if ( L i c z b aW y sw i e tl e n = = 1) { 3 r et u rn t ru e; 4 } else { 5 r et u rn f al se ; 6 } 7 } 8 p ub li c s ta ti c v oi d W y s w i e t l T e k s t ( ) { 9 LiczbaWyswietlen++; 10 if ( C z y P i e rw s z eW y s wi e t le n i e ( ) ) { 11 S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); 12 } else { 13 S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); 14 } 15 } Łukasz Hładowski 16 [...] 1

Refaktoryzacja 3b prim — przenosimy na koniec 1 2 3 4 5 6 7 8 9 10

LiczbaWyswietlen

[...] p ub li c s ta ti c v oi d W y s w i e t l T e k s t ( ) { if ( L i c z b aW y sw i e tl e n = = 0) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } else { S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); } LiczbaWyswietlen++; } [...]

Dlaczego warto to zrobić? Czy to rozwiązanie jest sensowniejsze? Łukasz Hładowski

Refaktoryzacja 3c — przenosimy

LiczbaWyswietlen

poza

WyswietlTekst 1 2 3 4 5 6 7 8 9 10 11 12 13

[...] p ub li c s ta ti c v oi d W y s w i e t l T e k s t ( ) { if ( L i c z b aW y sw i e tl e n = = 0) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } else { S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; WyswietlTekst(); LiczbaWyswietlen++; /*DODANA*/ WyswietlLiczbe(liczba); WyswietlTekst(); L i c z b a W y s w i e t l e n + + ; /* D l a cz eg o 2 r az ? * / } } [...]

Dlaczego warto to zrobić? Łukasz Hładowski

Refaktoryzacja 3d — Zastępujemy sensowniejszym 1 2 3 4 5 6 7 8 9 10 11 12

println

czymś

[...] p ub li c s ta ti c v oi d W y s wi e t lI n f or m a cj e O Bl e d z ie ( ) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } p ub li c s ta ti c v oi d W y s w i e t l I n f o r m a c j e O P o p r a w c e ( ) S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); } p ub li c s ta ti c v oi d W y s w i e t l T e k s t ( ) { if ( L i c z b aW y sw i e tl e n = = 0) { WyswietlInformacjeOBledzie(); } else { WyswietlInformacjeOPoprawce(); } }

Dlaczego warto to zrobić? Łukasz Hładowski

W

1 2 3 4 5 6 7 8 9

main

usuwamy zbędne

LiczbaWyswietlen++;

[...] p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; WyswietlTekst(); LiczbaWyswietlen++; System.out.print(liczba); WyswietlTekst(); /* L i cz b aW ys w ie t le n + +; - -- U SU NI ET A */ }

Dlaczego warto to zrobić?

Łukasz Hładowski

Refaktoryzacja 4 — Usuwamy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

WyswietlTekst

s ta t ic i nt L i c zb a W ys w i et l e n = 0 ; [. . .] p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; if ( L i c z b aW y s wi e t le n = =0 ) { WyswietlInformacjeOBledzie(); } else { WyswietlInformacjeOPoprawce(); } LiczbaWyswietlen++; System.out.print(liczba); if ( L i c z b aW y s wi e t le n = =0 ) { WyswietlInformacjeOBledzie(); } else { WyswietlInformacjeOPoprawce(); } }

Dlaczego warto to zrobić?

Łukasz Hładowski

Refaktoryzacja 5 — Przeciez 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

!

LiczbaWyswietlen=0

s ta t ic i nt L i c zb a W ys w i et l e n = 0 ; [. . .] p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; /* U SU WA M TE GO IF ’ a */ /* if ( L i cz ba Wy sw ie tl en == 0) { - -- WON ! */ WyswietlInformacjeOBledzie(); /* } else { */ /* W ys wi et lI nf or ma cj eO Po pr aw ce (); * / /* } */ LiczbaWyswietlen++; System.out.print(liczba); if ( L i c z b aW y s wi e t le n = =0 ) { WyswietlInformacjeOBledzie(); } else { WyswietlInformacjeOPoprawce(); } }

Dlaczego warto to zrobić?

Łukasz Hładowski

Refaktoryzacja 5 — Wynik 1 2 3 4 5 6 7 8 9 10 11 12

s ta t ic i nt L i c zb a W ys w i et l e n = 0 ; [. . .] p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; WyswietlInformacjeOBledzie(); LiczbaWyswietlen++; System.out.print(liczba); if ( L i c z b aW y s wi e t le n = =0 ) { WyswietlInformacjeOBledzie(); } else { WyswietlInformacjeOPoprawce(); } }

Tak samo robię z drugim if’em UWAGA! Teraz LiczbaWyswietlen=1! Łukasz Hładowski

Refaktoryzacja 6 — Usuwam niepotrzebną zmienną LiczbaWyswietlen

1 2 3 4 5 6 7 8

/* s ta ti c int L ic zb aW ys wi et le n = 0; - -- WON ! */ p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; WyswietlInformacjeOBledzie(); System.out.print(liczba); WyswietlInformacjeOPoprawce(); } }

Im prostszy kod, tym lepiej!

Łukasz Hładowski

Refaktoryzacja 7 — liczba przecież należy do informacji o błędzie! 1 2 3 4

/*PRZED*/ p ub li c s ta ti c v oi d W y s w ie t l In f o rm a c j eO B l ed z i e ( ) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); }

5 6 7 8 9 10 11 12

p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; WyswietlInformacjeOBledzie(); System.out.print(liczba); WyswietlInformacjeOPoprawce(); } }

Dlaczego ten kod jest błędny? Przecież się kompiluje!  Łukasz Hładowski

Refaktoryzacja 7 — Wynik 1 2 3 4 5

p ub li c s ta ti c v oi d W y s w i e t l I n f o r m a c j e O B l e d z i e (int l ic zb a ) { System.out.print(liczba); S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); }

6 7 8 9 10 11 12

p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int l i c z b a = 0 ; WyswietlInformacjeOBledzie(liczba); WyswietlInformacjeOPoprawce(); } }

Co to jest Łukasz Hładowski

liczba?

Refaktoryzacja 8 — Zmiana nazwy zmiennej 1 2 3 4 5 6 7

liczba

p ub li c s ta ti c v oi d W y s w i e t l I n f o r m a c j e O B l e d z i e (int n rB le du ) { System.out.print(nrBledu); S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } p ub li c s ta ti c v oi d W y s w i e t l I n f o r m a c j e O P o p r a w c e ( ) S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); }

8 9 10 11 12 13

p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int n r B l e d u = 0 ; WyswietlInformacjeOBledzie(nrBledu); WyswietlInformacjeOPoprawce(); }

Dla porównania — na następnej stronie kod, od którego zaczęliśmy Łukasz Hładowski

Co za ochydztwo! 1 2 3 4 5 6 7 8 9 10 11 12 13 14

s ta t ic i nt x ; p ub li c s ta ti c v oi d f ( ) { if ( ++ x = =1 ) { S y s t e m . o u t . p r i n t l n (" ) b le dz ik " ); } else { S y s t e m . o u t . p r i n t l n (" . .. p o pr a wi o ny " ); } } p ub li c s ta ti c v oi d f ( int x ){ f (); Sys tem . out . print ( x ); } p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { int x =0; f ( x ); f (); }

A teraz co? Łukasz Hładowski

Tworzenie obiektów p ub l ic c la ss Test { p r iv at e i nt x ; p ub l ic v oi d S e t X ( int new X ) { x=newX; } p ub l ic i nt G et X () { return x ; } } p ub l ic c la ss Main { p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { Test obj = new T e s t ( ) ; obj.SetX(2); System.out.println(obj.GetX()); }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

}

Łukasz Hładowski

Obiekt Definition Obiekt jest to struktura zawierająca dane wewnętrzne i definiująca sensowne operacje na tych danych i/lub na danych dostarczonych z zewnątrz, przy czym dane wewnętrzne są chronione przed niepowołanym dostępem z zewnątrz. Wszystkie dane wewnętrzne obiektu muszą mieć nadane sensowne wartości początkowe w momencie tworzenia obiektu. Nie może istnieć obiekt, którego chociaż jedna składowa nie została ustawiona na sensowną wartość podczas jego tworzenia! Łukasz Hładowski

Tworzenie obiektów 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

p ub l ic c la ss Test { p r iv at e i nt x ; public T e s t ( int new X ) { SetX(newX); } p ub l ic v oi d S e t X ( int new X ) { x = new X ; } p ub l ic i nt G et X () { return x ; } } p ub l ic c la ss Main { p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { Test obj = new T e s t ( 2 ) ; o b j . S e t X ( 2 ) ; /* N IE PO TR ZE BN E ! */ System.out.println(obj.GetX()); }

} 17 Łukasz Hładowski

Zgłaszanie błędów — wyjątki 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

p ub li c s ta ti c v oi d m ai n ( S tr in g [ ] a rg s ) { B uf f er ed Re a de r s td in = new B u f f e r e d R e a d e r ( new I n p ut S t re a m Re a d er ( S ys te m . i n ) , 1 ); S tr i ng s tr ; int l i c z b a ; try { S y s t e m . o u t . p r i n t l n (" P od aj t ek st " ); s tr = s td in . r ea dL in e ( ); l ic zb a = I nt eg er . p ar se In t ( s tr ) ; System.out.println(str); } catch ( E xc ep ti on e ) { } }

Łukasz Hładowski

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF