Wykład 14 Programowanie obiektowe ciąg dalszy, str 1 Przypomnienie o klasach i obiektach -5 należydo int 314 należy do double false należy do boolean {27, 314,-15 należy do double[] wartość należy do typ obiekt należy do klasa Wartości należą do typów Obiekty należą do klas Definicja klasy określa kształt obiektu W definicji klasy podaje się: własności zmienne, od wartości których zależa obiekty tej klasy; konstruktory funkcje tworzące i inicjalizujące obiekty; metody funkcje zmieniające wartości, od których zależy obiekt; ew wyliczające coś dla obiektu Coś o motoryzacji Wykład 14 Programowanie obiektowe ciąg dalszy, str 2 class Samochod { static final double pojemnosc baku = 40; public String marka model; private double zuzycie paliwa; public double przebieg; public double ilosc paliwa; definicja stałej deklaracje własności
Coś o motoryzacji Wykład 14 Programowanie obiektowe ciąg dalszy, str 3 Różne obiekty klasy Samochód mogą się różnić wartościami własności marka model zuzycie paliwa przebieg ilosc paliwa Własność zuzycie paliwa jest prywatna, więc nie ma do niej dostępu spoza klasy Samochód Coś o motoryzacji Wykład 14 Programowanie obiektowe ciąg dalszy, str 4 class Samochod { Samochod(String mm, double zp) { markamodel=mm; zuzycie paliwa = zp; przebieg = 0; ilosc paliwa = pojemnosc baku; konstruktor 2-parametrowy Samochod(String mm, double zp, doublepr,doubleip) { markamodel=mm; zuzycie paliwa = zp; przebieg = pr; iloscpaliwa=ip; konstruktor 4-parametrowy
Coś o motoryzacji Wykład 14 Programowanie obiektowe ciąg dalszy, str 5 Konstruktor tworzy nowy obiekt klasy Samochód i inicjalizuje jego własności Konstruktor 4-parametrowy inicjalizuje 4 własności czterema podanymi parametrami Konstruktor 2-parametrowy inicjalizuje 2 własności dwiema podanymi parametrami, a pozostałym dwóm nadaje wartości domyślne Coś o motoryzacji Wykład 14 Programowanie obiektowe ciąg dalszy, str 6 class Samochod { void jedzie(double odleglosc) { doubleilpal= ilosc paliwa - odleglosc/100*zuzycie paliwa; if(ilpal>=0) { przebieg += odleglosc; iloscpaliwa=ilpal; else throw new Error("\nZamalopaliwa\n"); METODA jeśli paliwa starczy jeśli paliwa nie starczy (sygnalizacja błędu)
Coś o motoryzacji Wykład 14 Programowanie obiektowe ciąg dalszy, str 7 Wywołanie metody należącej do konkretnego samochodu może jeśli jest void zmienić wartości własności tego samochodu w tym przypadku: stan licznika i wielkość zapasu paliwa; jeśliniejestvoid wyliczyćjakąśwartośćwoparciuo parametry i wartości własności tego samochodu w tym przypadku: nie robi tego Metoda może korzystać również z własności prywatnych Zewnętrzna funkcja nie mogłaby mieć do nich dostępu Coś o motoryzacji Wykład 14 Programowanie obiektowe ciąg dalszy, str 8 class Samochod { void tankuje(double ilosc) { doubleilpal=iloscpaliwa+ilosc; if(ilpal<=pojemnoscbaku) iloscpaliwa=ilpal; else throw new Error("\nBrakmiejscawbaku\n"); METODA jeśli bak jest dość duży jeślibakjestzamały (sygnalizacja błędu) Error() jest konstruktorem standardowej klasy Error throw to instrukcja zagłaszania błędu
Wykład 14 Programowanie obiektowe ciąg dalszy, str 9 Wyjaśnienia do programu głównego patrz plik 14-Java-cd/Samochodjava Stworzenie nowych samochodów: Samochod stary = new Samochod("Syrenka", 8, 10000, 20); Samochod nowy = new Samochod("Toyota", 6); Czytanie w kółko wiersz po wierszu, aż przyjdą widzialne znaki: do { komenda = czytnextline()trim(); while(komendaequals("")); Metoda trim() klasy String usuwa wiodące i kończące białe znaki Metoda equals() klasy String porównuje napisy Porównanie przez == daje niepoprawne wyniki Program rysujący Wykład 14 Programowanie obiektowe ciąg dalszy, str 10 patrz plik 14-Java-cd/Rysunekjava klasa Rysunek (zawierająca metodę main()) korzysta z klasy Odcinek korzysta z klasy Punkt
Program rysujący Wykład 14 Programowanie obiektowe ciąg dalszy, str 11 class Punkt { private double x, y; publicpunkt(doublex,doubley) {thisx=x;thisy=y; publicdoublewspx() {returnx; publicdoublewspy() {returny; class Odcinek { private Punkt p, k; publicodcinek(punktpocz,punktkon) {p=pocz;k=kon; public Punkt poczatek() { return p; public Punkt koniec() { return k; public void rysuj(graphics g) { gdrawline( (int)pwspx(),(int)pwspy(), (int)kwsp x(),(int)kwsp y() ); Program rysujący Wykład 14 Programowanie obiektowe ciąg dalszy, str 12 public void paint(graphics g) { final Punkt srodek = new Punkt(250,150); final double prom=100; double kat1=0, kat2=mathpi/3; for(inti=0;i<6;i++) { Punktpt1=newPunkt( srodekwsp x()+prom*mathcos(kat1), srodekwsp y()+prom*mathsin(kat1) ); Punktpt2=newPunkt( srodekwsp x()+prom*mathcos(kat2), srodekwsp y()+prom*mathsin(kat2) ); (new Odcinek(pt1,pt2))rysuj(g); (new Odcinek(pt1,srodek))rysuj(g); kat1=kat2; kat2+=mathpi/3;
Typowa budowa klasy Wykład 14 Programowanie obiektowe ciąg dalszy, str 13 Wczymtakaklasa: class Punkt { private double x, y; publicpunkt(doublex,doubley) {thisx=x;thisy=y; publicdoublewspx() {returnx; publicdoublewspy() {returny; jest lepsza od takiej: class Punkt { public double x, y;? W pierwszym przypadku współrzędne skonstruowanego punktu nie mogą już być zmienione W drugim przypadku mamy do nich dostęp z zewnątrz: Punkta=newPunkt(); ax=0;ay=0; Systemoutprintln("x=="+ax+"y=="+ay); ax=05;ay=-05; Systemoutprintln("x=="+ax+"y=="+ay); Dziedziczenie Wykład 14 Programowanie obiektowe ciąg dalszy, str 14 Mamy definicję klasy: classa{ Tworzymy nową klasę: classbextendsa{ Klasa B posiada wszystkie własności i metody klasy A i dodatkowo własności i metody zdefiniowane specjalnie tutaj Konstruktor klasy B może korzystać z konstruktora nadrzędnej klasy A pod nazwą super() zamiast A()
Dziedziczenie Wykład 14 Programowanie obiektowe ciąg dalszy, str 15 patrz plik 14-Java-cd/Drukijava classdruk { private String tyt; Druk(String tytul) { tyt=tytul; Stringtytul() {returntyt; class Ksiazka extends Druk { private int ile str; private double cen; Ksiazka(String tt, int ii, double cc) { super(tt); ile str=ii; cen=cc; intilestron() {returnilestr; doublecena() {returncen; jest jeszcze metoda tytul() odziedziczona z klasy Druk