PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy...

27
Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) dr inż. Mariusz Trzaska [email protected] Modelowanie i Analiza Systemów informacyjnych (MAS) http://www.mtrzaska.com/

Transcript of PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy...

Page 1: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

Wykład 2Wybrane konstrukcje obiektowych

języków programowania (1)

dr inż. Mariusz Trzaska

[email protected]

Modelowanie i Analiza

Systemów informacyjnych

(MAS)

http://www.mtrzaska.com/

Page 2: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Podstawy

• Kontrolowanie sterowania

• Klasy

• Interfejsy

• Obsługa błędów

• Pojemniki

• System we/wyj

• Wydajność

• Podsumowanie

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 2

Zagadnienia

Wykorzystano materiały z Thinking in Java (3rd edition) autorstwa Bruce’a Eckel’a (http://www.mindview.net/Books/TIJ)

Page 3: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

Typy podstawowe

Primitive type Size Minimum Maximum Wrapper type

boolean — — — Boolean

char 16-bit Unicode 0 Unicode 216- 1 Character

byte 8-bit -128 +127 Byte

short 16-bit -215 +215—1 Short

int 32-bit -231 +231—1 Integer

long 64-bit -263 +263—1 Long

float 32-bit IEEE754 IEEE754 Float

double 64-bit IEEE754 IEEE754 Double

void — — — Void

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 3

Page 4: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Typ podstawowy

• int a = 5;

• Int b = 7;

• Obiekt dostępny przez referencję

• Person p = new Person();

• Person p2 = p;

• Person p3 = p;

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 4

Obiekty, a referencje

5

7

:Person

„Jan Kowalski”

p

p2p3

Page 5: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• char c = 'x';

• Character C = new Character(c);

• Character C = new Character('x');

• Powody opakowywania?

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 5

Klasy opakowujące (wrapper)

Page 6: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

{

int x = 12;

// Tylko x jest dostępny

{

int q = 96;

// x & q dostępne

}

// Tylko x jest dostępny

}

{

String s = new String("a string");

} // koniec zakresu

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 6

Zakres

Page 7: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

class ClassName {

/* Ciało klasy */

}

class DataOnly {

int i;

float f;

boolean b;

}

// Stworzenie obiektu

DataOnly d = new DataOnly( );

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 7

Klasy

Page 8: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

Primitive type Default

boolean false

char ‘\u0000’ (null)

byte (byte)0

short (short)0

int 0

long 0L

float 0.0f

double 0.0d

Dostęp do pól

d.i = 47;

d.f = 1.1f;

d.b = false;

Inicjalizacja - konstruktor

8Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2

Klasy (2)

Page 9: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Składnia

returnType nazwaMetody( /* Argumenty*/ ) {

/* Ciało */

}

• Metoda pobiera string, a zwraca int:int storage(String s) {

return s.length( ) * 2;

}

• Wiele argumentów dla metody

objectName.methodName(arg1, arg2, arg3);

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 9

Metody

Page 10: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

// HelloDate.java

(1) import java.util.*;

(2) public class HelloDate {

// metoda „startowa”

public static void main(String[] args) {

System.out.println("Hello, it's: ");

System.out.println(new Date( ));

}

}

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 10

Pierwszy program

Page 11: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

/* To jest komentarz

zawierający

wiele linii. */

// A to jest komentarz w jednej linii

• Dokumentowanie kodu źródłowego (javadoc)

/** Opis klasy */

public class DocTest {

/** opis atrybutu */

public int i;

/** Opis metody */

public void f( ) {}

}

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 11

Komentarze

Page 12: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Język: polski, angielski?

• Nazwy:

• Klas

• Metod

• Zmiennych

• Podział na mniejsze fragmenty

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 12

Jakość kodu

Page 13: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Samodokomentujący/czytelny kod

• Robert C. Martin: „Czysty kod. Podręcznik dobrego programisty”

• Konwencje

• Formatowanie kodu źródłowego

• Wcięcia

• Nawiasy { } – czy zawsze warto ich używać?

• tabs vs spaces

• Refactoring

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 13

Jakość kodu (2)

Page 14: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Po co?

• Przykład

void casts( ) {

int i = 200;

long l = (long)i;

long l2 = (long)200;

}

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 14

Rzutowanie (casting)

Page 15: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• If

if(Boolean-expression)

statement

else

statement

• return

• Iteracja

while(Boolean-expression)

statement

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 15

Kontrola sterowania

Page 16: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• do-whiledo

statement

while(Boolean-expression);

• break, continue

• for

for(initialization; Boolean-expression; step)

statement

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 16

Kontrola sterowania (2)

Page 17: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• switch

switch(integral-selector) {

case integral-value1 : statement; break;

case integral-value2 : statement; break;

case integral-value3 : statement; break;

case integral-value4 : statement; break;

case integral-value5 : statement; break;

// ...

default: statement;

}

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 17

Kontrola sterowania (4)

Page 18: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Cel

• Przykład

interface Instrument {

// Stała:

// static & final

int I = 5;

// tylko deklaracja

// metoda publiczna

void play(Note n);

String what();

void adjust();

}

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 18

Interfejsy

Page 19: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

Implementacja interfejsu

class Wind implements Instrument {

// wind – instrumenty dęte

public void play(Note n) {

System.out.println("Wind.play() " + n);

}

public String what() { return "Wind"; }

public void adjust() {}

}

class Brass extends Wind {

public void play(Note n) {

System.out.println("Brass.play() " + n);

}

public void adjust() {

System.out.println("Brass.adjust()");

}

}

class Woodwind extends Wind {

public void play(Note n) {

System.out.println("Woodwind.play() " + n);

}

public String what() { return "Woodwind"; }

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 19

Interfejsy (2)

Page 20: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Wykorzystanie interfejsów

Instrument currentInstrument = null;

currentInstrument = new Brass();

currentInstrument.play(1);

currentInstrument = new Woodwind();

currentInstrument.play(1);

• Rozwiązanie z:

• Klasą bazową,

• Interfejsami.

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 20

Interfejsy (3)

Page 21: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Błędy:

• Kompilacji,

• Czasu wykonania

• Jak to robiono kiedyś?

• Ustawianie zmiennej globalnej,

• Zwracanie specjalnej wartości (jakiej?)

• Współczesne podejście – wyjątki

• Zalety

• Wady (?)

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 21

Obsługa błędów

Page 22: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Klasa

• Dziedziczenie z klasy Exception

• Argumenty

• Łapanie wyjątków i ich obsługa

try {

// kod, który może spowodować wyjątek

} catch(Type1 id1) {

// Obsługa wyjątków typu Type1

} catch(Type2 id2) {

// Obsługa wyjątków typu Type2

}

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 22

Wyjątki

Page 23: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Metoda, która nie rzuca wyjątków na zewnątrz i obsługuje je „wewnątrz”

void f( ) { // ...

• Metoda, która „ostrzega”, że może rzucić wyjątek

void f( ) throws TooBigException,DivZeroException {

//...

• Które podejście jest lepsze?

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 23

Wyjątki (2)

Page 24: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Łapanie wszystkich wyjątkówcatch(Exception e) {

System.err.println("Caught an exception");

}

• Ponowne rzucanie wyjątku

catch(Exception e) {

System.err.println("An exception was thrown");

throw e;

}

• Specjalny przypadek NullPointerException

person.showName();

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 24

Wyjątki (3)

Page 25: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Sprzątanie z finallytry {

// Chroniony region: spodziewamy się wyjątków:

// A, B, lub C

} catch(A a1) {

// Obsługa A

} catch(B b1) {

// Obsługa B

} catch(C c1) {

// Obsluga C

} finally {

// Wykonywany zawsze!

}

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 25

Wyjątki (4)

Page 26: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Różne zastosowania

• Rozwiązanie klasyczne (nie polecane!)public class MainMenu {

public static final int MENU_FILE = 0;

public static final int MENU_EDIT = 1;

public static final int MENU_FORMAT = 2;

public static final int MENU_VIEW = 3;

}

• Nowe rozwiązanie z typem wyliczeniowym (enum)public enum MainMenu {FILE, EDIT, FORMAT, VIEW};

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 26

Używanie stałych

Page 27: PJWSTK - MAS - Wykład 05users.pja.edu.pl/~mtrzaska/Files/MAS/MAS-02.pdf · 2019-03-04 · Typy podstawowe Primitive type Size Minimum Maximum Wrapper type boolean — — — Boolean

• Ciąg dalszy na następnym wykładzie…

Modelowanie i Analiza Systemów Informacyjnych (MAS), wykład 2 27