Professional Documents
Culture Documents
Wykład 1
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 1/ 31
Zasady poprawnego pisania programów
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 2/ 31
Sensowne nazwy funkcji i zmiennych
Co się wypisze?
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 3/ 31
Rozwiązanie
1 6) bledzik
2 ... poprawiony
3 7) bledzik
4 ... poprawiony
5 8) bledzik
6 ... poprawiony
7 9) bledzik
8 ... poprawiony
9 10) bledzik
10 ... poprawiony
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 4/ 31
Sensowne nazwy funkcji i zmiennych
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 5/ 31
Rozwiązanie
1 678910) bledzik
2 ... poprawiony
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 6/ 31
’Ukochane’ nazwy...
1 public class Main {
2 static int x ;
3 public static void f (){
4 if (++ x ==1) {
5 System . out . println ( " ) bledzik " );
6 } else {
7 System . out . println ( " ... poprawiony " );
8 }
9 }
10 public static void f ( int x ){
11 f (); System . out . print ( x );
12 }
13 public static void main ( String [] args ) {
14 int x =0; f ( x ); f ();
15 }
16 }
A teraz co?
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 7/ 31
Rozwiązanie
1 ) bledzik
2 0... poprawiony
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 8/ 31
Refaktoryzacja 1 — zmiana nazw i wart. pocz.
1 public class Main {
2 static int LiczbaWyswietlen =0; /* oczywiste ! */
3 public static void WyswietlTekst (){
4 if (++ LiczbaWyswietlen ==1) {
5 System . out . println ( " ) bledzik " );
6 } else { System . out . println ( " ... poprawiony " );}
7 }
8 public static void WyswietlLiczbe ( int liczba ){
9 WyswietlTekst ();
10 System . out . print ( liczba );
11 }
12 public static void main ( String [] args ) {
13 int liczba =0;
14 WyswietlLiczbe ( liczba );
15 WyswietlTekst ();}}
poza WyswietlLiczbe
1 public class Main {
2 static int LiczbaWyswietlen = 0;
3 public static void WyswietlTekst (){
4 if (++ LiczbaWyswietlen ==1) {
5 System . out . println ( " ) bledzik " );
6 } else { System . out . println ( " ... poprawiony " );}
7 }
8 public static void WyswietlLiczbe ( int liczba ){
9 System . out . print ( liczba );
10 } /* USUNIĘTA */
11 public static void main ( String [] args ) {
12 int liczba =0;
13 WyswietlTekst (); /* DODANA */
14 WyswietlLiczbe ( liczba );
15 WyswietlTekst (); }}
Łukasz Hładowski
Po co nam WyswietlLiczbe?
Podstawy modelowania programów — Wykład 1 10/ 31
Wynik
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 11/ 31
Refaktoryzacja 3 — funkcja WyswietlTekst
1 [...]
2 public static void WyswietlTekst (){
3 if (++ LiczbaWyswietlen ==1) {
4 System . out . println ( " ) bledzik " );
5 } else {
6 System . out . println ( " ... poprawiony " );
7 }
8 }
9 [...]
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 12/ 31
Refaktoryzacja 3a — zastępujemy ++x kodem
równoważnym
1 [...]
2 public static void WyswietlTekst (){
3 LiczbaWyswietlen ++;
4 if ( LiczbaWyswietlen ==1) {
5 System . out . println ( " ) bledzik " );
6 } else {
7 System . out . println ( " ... poprawiony " );
8 }
9 }
10 [...]
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 13/ 31
Refaktoryzacja 3b — upraszczamy
if (LiczbaWyswietlen==1) kodem równoważnym
na koniec
1 [...]
2 public static void WyswietlTekst (){
3 if ( LiczbaWyswietlen ==0) {
4 System . out . println ( " ) bledzik " );
5 } else {
6 System . out . println ( " ... poprawiony " );
7 }
8 LiczbaWyswietlen ++;
9 }
10 [...]
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 15/ 31
Refaktoryzacja 3c — przenosimy LiczbaWyswietlen poza
WyswietlTekst
1 [...]
2 public static void WyswietlTekst (){
3 if ( LiczbaWyswietlen ==0) {
4 System . out . println ( " ) bledzik " );
5 } else { System . out . println ( " ... poprawiony " );}
6 public static void main ( String [] args ) {
7 int liczba =0;
8 WyswietlTekst ();
9 LiczbaWyswietlen ++; /* DODANA */
10 WyswietlLiczbe ( liczba );
11 WyswietlTekst ();
12 LiczbaWyswietlen ++; /* Dlaczego 2 raz ? */
13 } } [...]
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 17/ 31
W main usuwamy zbędne LiczbaWyswietlen++;
1 [...]
2 public static void main ( String [] args ) {
3 int liczba =0;
4 WyswietlTekst ();
5 LiczbaWyswietlen ++;
6 System . out . print ( liczba );
7 WyswietlTekst ();
8 /* LiczbaWyswietlen ++; --- USUNIETA */
9 }
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 18/ 31
Refaktoryzacja 4 — Usuwamy WyswietlTekst
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 22/ 31
Refaktoryzacja 7 — liczba przecież należy do
informacji o błędzie!
1 /* PRZED */
2 public static void
3 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 () {
4 System . out . println ( " ) bledzik " ); }
5
6 public static void main ( String [] args ) {
7 int liczba =0;
8 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 ();
9 System . out . print ( liczba );
10 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 ();
11 }
12 }
Co to jest liczba?
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 24/ 31
Refaktoryzacja 8 — Zmiana nazwy zmiennej liczba
A teraz co?
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 26/ 31
Tworzenie obiektów
1 public class Test {
2 private int x ;
3 public void SetX ( int newX ) {
4 x = newX ;
5 }
6 public int GetX () {
7 return x ;
8 }
9 }
10 public class Main {
11 public static void main ( String [] args ) {
12 Test obj = new Test ();
13 obj . SetX (2);
14 System . out . println ( obj . GetX ());
15 }
16 }
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 27/ 31
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
Podstawy modelowania programów — Wykład 1 28/ 31
Tworzenie obiektów
1 public class Test {
2 private int x ;
3 public Test ( int newX ) {
4 SetX ( newX );
5 }
6 public void SetX ( int newX ) {
7 x = newX ; }
8 public int GetX () {
9 return x ; }
10 }
11 public class Main {
12 public static void main ( String [] args ) {
13 Test obj = new Test (2);
14 obj . SetX (2); /* NIEPOTRZEBNE ! */
15 System . out . println ( obj . GetX ());
16 }
17 }
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 29/ 31
Zgłaszanie błędów — wyjątki
1 public static void main ( String [] args ) {
2 BufferedReader stdin = new BufferedReader (
3 new I nputSt reamRe ader ( System . in ) , 1
4 );
5 String str ;
6 int liczba ;
7 try {
8 System . out . println ( " Podaj tekst " );
9 str = stdin . readLine ();
10 liczba = Integer . parseInt ( str );
11 System . out . println ( str );
12 }
13 catch ( Exception e ) {
14 }
15 }
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 30/ 31
Zgłaszanie błędów — wyjątki
1 try {
2 System . out . println ( " Podaj tekst " );
3 str = stdin . readLine ();
4 liczba = Integer . parseInt ( str );
5 System . out . println ( str );
6 }
7 catch ( N u m b e r F o r m a t E x c e p t i o n e ) {
8 System . err . print ( " Blad konwersji typu " );
9 System . err . print ( e . getClass ());
10 System . err . print ( " : " );
11 System . err . print ( e . getCause ());
12 System . err . print ( " . " );
13 System . err . println ( e . getMessage ());
14 }
15 catch ( IOException e ) { [...]
16 }
17 }
Łukasz Hładowski
Podstawy modelowania programów — Wykład 1 31/ 31