Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Klasy i obiekty.

Podobne prezentacje


Prezentacja na temat: "Klasy i obiekty."— Zapis prezentacji:

1 Klasy i obiekty

2 Klasy i obiekty Logiczna spójność danych Prehistoria – typy proste
Przykład - cząsteczka Prehistoria – typy proste Historia – struktury Programowanie obiektowe Enkapsulacja Obiekty jako metoda na zapanowanie nad kodem Anatomia i fizjologia klasy i obiektu Przykład – triangulacja na płaszczyźnie Dziedziczenie Polimorfizm Przykład – komponenty wizualne

3 Anatomia 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 float[dimension]; } public Point(float[] coords) { dimension = coords.length; // coordinates = coords; coordinates = coords.clone(); public int getDimension() { return dimension; public float[] getCoordinates(){ // return coordinates; return coordinates.clone(); Pakiety organizują klasy w strukturę katalogów. Deklaracja – klasa publiczna (dostępna zewsząd) Deklaracje i inicjalizacje pól danych pola chronione - enkapsulacja Konstruktor pusty – domyślny Konstruktory przeciążone – rozróżniane po sygnaturze Point() Point(int) Point(float[]) Niebezpieczne – coords można zmienić poza klasą Bezpiecznie: zapamiętujemy kopię "getter" – z automatu enkapsulacji Niebezpieczne – coordinates można zmienić poza klasą Bezpiecznie: zwracamy kopię

4 Anatomia 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) float[] c = pt.getCoordinates(); for (int i=0; i<coordinates.length;i++) if (c[i]!=coordinates[i]) return true; . . . "Setter": przydatny, gdy zbudowaliśmy "pusty" punkt. Zauważmy wstępne sprawdzenie poprawności wymiaru i użycie clone. Porównywanie trzeba zaimplementować explicite! (a==b znaczy, że a i b są referencjami do tego samego obiektu) instanceof sprawdza, czy p możemy interpretować jako obiekt klasy Point. Rzutujemy (cast) interpretując p jako obiekt klasy Point. Egzamin się zaczyna…. Oblany Zdany!

5 Jak to działa, 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("p==q "+(p==q)+ " p.equals(q) "+ (p.equals(q))); q.setCoords(c); r = p; System.out.println("p==r "+(p==r)+ " p.equals(r) "+ (p.equals(r))); Ćwiczenie: Stworzyć klasę Point używając tekstu z unigrids.icm.edu.pl/java/java3.java Sprawdzić działanie point1==point2 i point1.equals(point2)

6 Po przodkach dziedziczymy honor (ale niekoniecznie metody)
package pl.edu.icm.geometry; public class Point2D extends Point { public Point2D (){ dimension = 2; coordinates = new float[dimension]; } public Point2D (int dimension) { this(); public Point2D (float[] coords) { if (coords.length!=2) return; dimension = coords.length; coordinates = coords.clone(); Budujemy punkt na płaszczyźnie: Wymiar musi być 2, więc konstruktor bezargumentowy może zrobić coś konkretnego Nadpisujemy… Nadpisujemy, sprawdzając poprawność wymiaru.

7 I dorabiamy się czegoś własnego
public Point2D rotate(Point2D origin, float phi){ //implementujemy via transform lub "ręcznie" } public void draw(Graphics gr, Color color, float[] origin, float scale){ Color c = gr.getColor(); gr.setColor(color); int ix = (coordinates[0]-origin[0])*scale; int iy = (coordinates[1]-origin[1])*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, przeciążając to i owo...

8 I pierwsze międzymordzie:
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 się więcej pisać,
galopem do netbeansów


Pobierz ppt "Klasy i obiekty."

Podobne prezentacje


Reklamy Google