Title: Klasy i obiekty
1Klasy i obiekty
2Klasy i obiekty
- Logiczna spójnosc danych
- Przyklad - czasteczka
- Prehistoria typy proste
- Historia struktury
- Programowanie obiektowe
- Enkapsulacja
- Obiekty jako metoda na zapanowanie nad kodem
- Anatomia i fizjologia klasy i obiektu
- Przyklad triangulacja na plaszczyznie
- Dziedziczenie
- Polimorfizm
- Przyklad komponenty wizualne
3Anatomia i fizjologia klasy i obiektu
- package pl.edu.icm.geometry
- public class Point
-
- protected int dimension 0
- protected float coordinates null
- public Point()
- public Point(int dimension)
- this.dimension dimension
- coordinates new floatdimension
-
- public Point(float coords)
- dimension coords.length
- // coordinates coords
- coordinates coords.clone()
-
- public int getDimension()
- return dimension
-
- public float getCoordinates()
Pakiety organizuja klasy w strukture
katalogów. Deklaracja klasa publiczna (dostepna
zewszad) Deklaracje i inicjalizacje pól danych
pola chronione - enkapsulacja Konstruktor pusty
domyslny Konstruktory przeciazone rozrózniane
po sygnaturze Point() Point(int)
Point(float) Niebezpieczne coords mozna
zmienic poza klasa Bezpiecznie zapamietujemy
kopie "getter" z automatu enkapsulacji Niebez
pieczne coordinates mozna zmienic poza
klasa Bezpiecznie zwracamy kopie
4Anatomia i fizjologia klasy i obiektu
- public void setCoordinates(float coords)
-
- if (dimension!0
- dimension!coords.length)
- return
- dimension coords.length
- coordinates coords.clone()
-
- public boolean equals(Object p)
- if (! p instanceof Point)
- return false
- Point pt (Point)p
- if (pt.getDimension()!dimension)
- return false
- float c pt.getCoordinates()
- for (int i0
- iltcoordinates.lengthi)
- if (ci!coordinatesi)
- return false
"Setter" przydatny, gdy zbudowalismy "pusty"
punkt. Zauwazmy wstepne sprawdzenie poprawnosci
wymiaru i uzycie clone. Porównywanie trzeba
zaimplementowac explicite! (ab znaczy, ze a i b
sa referencjami do tego samego obiektu) instanceof
sprawdza, czy p mozemy interpretowac jako obiekt
klasy Point. Rzutujemy (cast) interpretujac p
jako obiekt klasy Point. Egzamin sie
zaczyna. Oblany Oblany Zdany!
5Jak to dziala, czyli co jest czym
- Main
- float c 1,2,3,4,5
- Point p new Point(c)
- Point q new Point()
- Point r
- System.out.println("pq "(pq)
- " p.equals(q) " (p.equals(q)))
- q.setCoords(c)
- r p
- System.out.println("pq "(pq)
- " p.equals(q) " (p.equals(q)))
- System.out.println("pr "(pr)
- " p.equals(r) " (p.equals(r)))
Cwiczenie Stworzyc klase Point uzywajac tekstu
z unigrids.icm.edu.pl/java/java3.java Sprawdzic
dzialanie point1point2 i point1.equals(point2)
6Po przodkach dziedziczymy honor(ale
niekoniecznie metody)
- package pl.edu.icm.geometry
- public class Point2D extends Point
-
- public Point2D ()
- dimension 2
- coordinates new floatdimension
-
- public Point2D (int dimension)
- this()
-
- public Point2D (float coords)
- if (coords.length!2)
- return
- dimension coords.length
- coordinates coords.clone()
-
- Budujemy punkt na plaszczyznie
- Wymiar musi byc 2, wiec konstruktor
bezargumentowy moze zrobic cos konkretnego - Nadpisujemy
- Nadpisujemy, sprawdzajac poprawnosc wymiaru.
7I dorabiamy sie czegos wlasnego
- public Point2D rotate(Point2D origin, float phi)
- //implementujemy via transform lub "recznie"
-
- public void draw(Graphics gr, Color color,
- float origin, float scale)
- Color c gr.getColor()
- gr.setColor(color)
- int ix (coordinates0-origin0)scale
- int iy (coordinates1-origin1)scale
- gr.drawOval(ix-1,iy-1,2,2)
- gr.setColor(c)
-
- public void draw(Graphics gr)
- float origin 0,0
- draw(gr, Color.BLACK, origin, 1)
-
Jak zwykle, przeciazajac to i owo...
8I pierwsze miedzymordzie
- public interface Drawable
-
- public void draw(Graphics, Color, float,
float) - public void draw(Graphics gr)
oraz jego implementacja
public class Point2D extends Point implements
Drawable ...
9 - Nie chce mi sie wiecej pisac,
- wiec
- galopem do netbeansów