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 " ); }
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 (); } }
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
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 " ); } } [...]
[...] 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 ? * / } } [...]
[...] 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 */ }
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(); } }
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(); } }
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
/* 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
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()); }
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 ) { } }
Thank you for interesting in our services. We are a non-profit group that run this website to share documents. We need your help to maintenance this website.