1 / 90

Podstawy programowania obiektowego (Java)

Przemysław Pardel , Listopad 200 7. Podstawy programowania obiektowego (Java). Agenda. Historia i geneza programowania obiektowego, Programowanie obiektowe, Obiekty i typy podstawowe, Klasy, Metody, Pola i metody statyczne, Konstruktory, Pakiety, Polimorfizm,

masao
Download Presentation

Podstawy programowania obiektowego (Java)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Przemysław Pardel, Listopad 2007 Podstawy programowania obiektowego (Java)

  2. Agenda • Historia i geneza programowania obiektowego, • Programowanie obiektowe, • Obiekty i typy podstawowe, • Klasy, • Metody, • Pola i metody statyczne, • Konstruktory, • Pakiety, • Polimorfizm, • Metody i klasy abstrakcyjne, • Interfejsy, • Inne.

  3. Historia i geneza programowania obiektowego

  4. Historia programowania obiektowego • Simuli 67 – Ole-Johan Dahl i Kristen Nygaard z Norsk Regnesentral w Oslo - pogrupowano typy statków w różne klasy obiektów, a każda z klas sama odpowiadała za określanie własnych danych i zachowań • Smalltalk - stworzony w Simuli w Xerox PARC - w pełni dynamiczny system, w którym obiekty mogą być tworzone i modyfikowane "w locie„ • C++ - połowa lat 80 - W tym okresie cechy obiektowe dodano do wielu języków programowania, w tym Ady, BASIC-a, Lisp-a, Pascal-a i innych, • Eiffel - Bertrand Meyer - obecnie został on w zasadzie całkowicie zastąpiony przez Javę • Obiektowość rozprzestrzeniła się dość znacznie, jednak zwykle w systemach hybrydowych, w połączeniu z programowaniem niskopoziomowym (C++), funkcyjnym (Ocaml, niektóre dialekty Lisp-a), sieciowym (Java), skryptowym (Perl, Python, Ruby) itd. Systemy czysto obiektowe typu Smalltalk-a nie znalazły zbyt szerokiego zastosowania.

  5. Programowanie obiektowe a rzeczywistość • Zgodność podejścia z rzeczywistością – największy atut programowania, projektowania oraz analizy obiektowej. • Arystoteles – forma (odpowiednik platońskiej idei) i materia (Formie w programowaniu obiektowym odpowiada Klasa, materii - instancja - obiekt). • Podstawową cechą mózgu ludzkiego jest klasyfikacja - łączenie występujących w rzeczywistości obiektów w grupy – klasy. • Podstawowy postulat: Tym lepszy jest model, im bardziej jest zgodny z rzeczywistością.

  6. Programowanie obiektowe

  7. Programowanie obiektowe • Definicja: Programowanie obiektowe - (ang. object-oriented programming) – metodyka tworzenia programów komputerowych, która definiuje programy za pomocą obiektów – elementów łączących stan (czyli dane) i zachowanie (czyli procedury, metody) • Obiektowy program komputerowy wyrażony jest jako zbiór obiektów komunikujących się pomiędzy sobą w celu wykonywania określonych zadań.

  8. Podejście obiektowe • Wszystko jest obiektem. • Program jest zbiorem obiektów, które wysyłają sobie komunikaty. • Każdy obiekt posiada pamięć, na którą składają się inne obiekty. • Każdy obiekt posiada swój typ. • Wszystkie obiekty tego samego typu mogą otrzymywać te same komunikaty.

  9. Obiekty i typy podstawowe

  10. Obiekty • Definicja: Obiekt: Podstawowa jednostka abstrakcji modelu obiektowego • Główne cechy obiektu: • Stan – dane wewnętrzne, • zachowanie – zestaw metod do wykonania, • tożsamość – każdy obiekt można w sposób jednoznaczny odróżnić od innych obiektów.

  11. Tworzenie obiektów • Metoda statyczna • Na stosie lub w obszarze statycznym: • Metoda szybka, • Programista musi sam zwolnić pamięć. • Kompilator wyznacza czas trwania obiektu, i sam go niszczy. • Metody dynamiczna (Java) • Tworzenie dynamiczne obiektów nastercie: • Ilość i czas życia obiektównieznany do czasu wykonania. • Java używa odśmiecacz pamięci (garbage collector), bywykrywać i usuwać obiekty nieużywane.

  12. Implementacja obiektu • Definicja: Implementacja to kod umożliwiający wykonanie żądań przez obiekt • np. Utworzenie obiektu klasy: Autobus aut = new Autobus(); Żądanie pod kierunkiem obiektu: aut.Uruchom();

  13. Program - Obiekt jako Usługodawca • Program dostarczausługi, • Program składa się ze zbioru obiektów, • Realizuje usługi wykorzystując usługi wykonywane przez składowe obiekty, • Usługowy model ułatwia projektowanie, analizę i ponowne użytkowanie obiektów.

  14. Obiekty cd… • Wszystko w Javie jest obiektem JAVA: Deklaracja tworzy odwołanie do obiektu stypu/klasy String: String s Obiekt wskazywany przez s nie istnieje zatem: s.length() – ŹLE Deklaracja oraz inicjacja odwołania do obiektu s typu/klasy String: String s = new String(“abc”); Teraz s wskazuje na konkrety obiekt utworzony w pamięci, o wartości “abc” s.length() - DOBRZE

  15. Przechowywanie danych • Rejestry – szybka pamięć wewnątrzprocesora, ograniczona liczba,niedostępne z programu, • Stos - część RAM, szybki dostęp,rozmiar i czas życia danych znane wczasie kompilacji, odwołania doobiektów, • Sterta – część RAM, rozmiar i czas życiadanych nieznane w czasie kompilacji,składowanie obiektów, wolniejszy dostęp, • Obszar statyczny – część RAM, danedostępne w dowolnym momencie zprogramu, słowo kluczowe static, • Obszar stałych – w kodzie programu,ewentualnie w pamięci ROM, • Obszar spoza RAM – obiekty trwałe(zachowują stan między wywołaniamiprogramu), zamiana obiektów wstrumień bajtów (do przesłania/zapisu).

  16. Typy podstawowe • Czasami tworzenie obiektów na stercie(przez operator new) nie jest efektywne: Integer i = new Integer(1); • Typ podstawowy: int i = 1; Tworzy się zmienna która nie jestodwołaniem doobiektu, a wartością.

  17. Typy podstawowe Java • boolean(Boolean), char(Character), byte(Byte), short(Short), int(Integer), long(Long), float(Float), double (Double), void(Void), • Rozmiar każdego typu jest niezmienny –programy są przenośne, • Wszystkie typy numeryczne są zeznakiem, • Klasa opakowująca typ podstawowypozwala umieszczać dane na stercie: Integer i = new Integer(1);

  18. Zasięg i przesłanianie zmiennych • Zasięg przez położenie nawiasów: { int i = 1; // dostepny i { int j = 2; // dostepne i, j } i = j // dostepny i } • Niedozwolone przesłanianie { int i = 1; { int i = 2; // niedozwolone, Komunikat błędu – zmienna już istnieje } }

  19. Zasięg obiektów • Życie obiektów jest inne od życia zmiennych typów podstawowych. { String str = new String(“abc”); } • Odwołanie str nie istnieje poza zasięgiemdeklaracji, natomiast obiekt wskazanyprzez str będzie nadal istniał.

  20. Klasy

  21. Klasy • Obiekty które są identyczne z wyjątkiem stanu są grupowane w klasy, Klasa bytów (class) określa opis bytu (stałe, zmienne, pola) oraz jego zachowanie (metody) Klasa: interfejs i implementacja. • Obiekty klasy mają tą samą: • charakterystykę – elementy składowe • zachowanie – operacje na stanie • Różnią się wartością stanu, i tożsamością.

  22. Klasy w języku Java • Każda klasa dziedziczy z klasy Object - przynajmniej pośrednio. • Klasa zadeklarowana jako final nie może być już niczyją nadklasą. • Za inicjalizowanie obiektów danej klasy odpowiadają konstruktory (Java tworzy domyślny - bezargumentowy).

  23. Tworzenie typów • Nowe typy obiektów zawarte są w klasach. • Deklaracja klasy: class NazwaTypu { ... } • Utworzenie obiektów klasy: NazwaTypu a = new NazwaTypu(); • Klasa zawiera dwa rodzaje elementów: • pola – obiekty dowolnego typu lubzmienne typów podstawowych • metody – komunikaty które możeotrzymać dany obiekt

  24. Pola klas • Każdy obiekt uzyskuje własny obszarpamięci dla swoich zmiennych: class Dane { int i; float f; Double d; } • Obiekty nie dzielą zmiennych między sobą.

  25. Odwołanie do pól • Utworzenie obiektu klasy: Dane da = new Dane(); • Odwołanie do pól obiektu da: da.i = 47; da.f = 1.1f; da.d = new Double(1.0d);

  26. Wartości pól • Gdy pole jest typu podstawowego, jeśli niezainicjowane, to otrzyma wartośćdomyślną: • boolean false, char '\u0000‘, byte (byte)0, short (short)0, int 0, long 0L, float 0.0f • Inicjalizacja jest gwarantowana dlazmiennych: • typu podstawowego • deklarowanych jako składowe klas • Inicjalizacja nie dotyczy zmiennychlokalnych, które nie są polami w klasie.

  27. Korzystanie z ‘’innych’’ klas Położenie klasy ? • W tym samy pliku źródłowym – po prostu używamy • Inne położenie np. • klasa ArrayList import java.util.ArrayList; • Wszystkie klasy w pakiecie java.util import java.util.*;

  28. Metody

  29. Metody • Definicja: Metoda - Nazwane zachowanie obiektu jakie jest on zobowiązany przejawić; określona funkcjonalność jaką przejawiają obiekty danej klasy • W Javie rozróżniamy dwa rodzaje metod: • Metoda klasowa (static) istnieje jedna dla wszystkich obiektów danej klasy, nawet, gdy żaden z nich jeszcze nie został powołany do życia, • Metoda instancyjna - jest tyle kopii ile obiektów, czyli do każdego obiektu przypisana jest kopia metody instancyjnej.

  30. Metody Klas • Metoda określa komunikat które możeotrzymać dany obiekt: typZwracany nazwaMetody(/*argumenty*/) { ciało metody } • Deklarowane tylko jako części składoweklas, i wywoływane na rzecz obiektu. • typZwracany to typ wartości zwracanychprzez metodę. • argumenty to typy i nazwy; listaargumentów przekazywanych metodzie. • ciało metody to definicja metody.

  31. Wywoływanie metod • Podanie nazwy obiektu, kropki, nazwymetody, i jej listy argumentów (wysyłanie komunikatu do obiektu): nazwaObiektu.nazwaMetody(arg1,arg2) • Lista obiektów i ich klas, które mogą byćprzekazane metodzie: int pamiec(String str) { return str.length(); } • strjest referencją do obiektu. • length() jest jedną z metod łańcucha str.

  32. Wynik metody • return pełni dwie funkcje: • określa opuszczenie metody • określa wartość zwracaną (jeśli jest) • Typ void - metoda nie zwraca wartości: void nic_return() { return; } void nic2_bez_return() { }

  33. Przeciążanie Metod • Klasa posiada dwie lub więcej metod o tej samejnazwie ale różnych deklaracjach parametrów. • Java używa liczby i typów argumentów by ustalić, którą wersję metody należy wywołać. • Przeciążanie metod plus dziedziczenie to sposóbnaimplementację polimorfizmu.

  34. Przykład class Metody { void test() { System.out.println("Brak parametrow"); } void test(int a) { System.out.println("a: " + a); } void test(int a, int b) { System.out.println("a i b: " + a + " " + b); } double test(double a) { System.out.println("double a: " + a); return a*a; } }

  35. Przeciążanie i konwersja typów • Automatyczna kowersja typów gdy nie istnieje metodao dokładnym typie wywołania: void test() { System.out.println("Brak parametrow”); } void test(double a) { System.out.println("double a: " + a); } int i = 88; test(); test(i); • Następuje konwersja int na double

  36. Przeciążanie i polimorfizm • Java umożliwia wystąpienie powiązanych metod podjedną nazwą: jeden interfejs, wiele metod. static int abs(int i) static long abs(long i) static float abs(float i)

  37. Pola i metody statyczne

  38. Pola statyczne • Deklaracja pól statycznych: class StaticTest { static int i = 47; } • st1.i i st2.i są te same: StaticTest st1 = new StaticTest(); StaticTest st2 = new StaticTest(); • Odwołanie przez obiekty klasy: st1.i++; • Odwołanie bez obiektu klasy: StaticTest.i++;

  39. Metody statyczne • Możliwość wywołania metody bezkonieczności tworzenia obiektu (np. main): class StaticFun { static void incr() { StaticTest.i++ } } • Przez obiekt: StaticFunction sf = new StaticFunction(); sf.incr(); • Przez klasę: StaticFunction.incr();

  40. Przykłady Program wyświetlający na ekranie słowo ‘’Hello World’’ i bieżącą datę: //HelloWorld.java- Komentarz import java.util.*;//???? public class HelloWorld { public static void main(String [] args) { System.out.println(“’Hello World , “); System.out.println(new Date()); } } • Nazwy klas rozpoczynają się od dużejlitery, każdy kolejny wyraz też z dużejlitery. • Nazwy zmiennych/pól/metod podobnie,ale pierwsza litera jest mała.

  41. Konstruktory

  42. Konstruktor • Konstruktor realizuje automatyczną inicjację obiektuzaraz po jego utworzeniu, • Konstruktor posiada tą samą nazwę jak klasa, wktórej się znajduje, • Konstruktor piszemy bez typu wyniku: domyślnymtypem konstruktora klasy jest ta sama klasa, • Gdy klasa nie posiada konstruktora, domyślnykonstruktor automatycznie inicjuje pola zerami.

  43. Konstruktor przykład class Pudelko { double szerokosc, wysokosc, glebokosc; //konstruktor pudelka Pudelko() { System.out.println(“Budujemy pudelko”); szerokosc = 10; wysokosc = 10; glebokosc = 10; } //oblicza objetosc pudelka double objetosc() { return szerokosc * wysokosc * glebokosc; } }

  44. Parametryzowany Konstruktor class Pudelko { double szerokosc, wysokosc, glebokosc; //parametryzowany konstruktor pudelka Pudelko(double s, double w, double g) { szerokosc = s; wysokosc = w; glebokosc = g; } ... }

  45. Słowo kluczowe this • Odwołanie z metody do obiektu który ją wywołał, • Przesłanianie Pól: • Nielegalne jest deklarowanie dwóch zmiennych o tejsamej nazwie wewnątrz zawierających się bloków, • Legalne jest deklarowanie zmiennych lokalnych i parametrów o tej samej nazwie jak pola klasy, • Następuje przesłonięcie pól przez zmienne lokalne: Pudelko(double szerokosc, double wysokosc,double glebokosc) { this.szerokosc = szerokosc; this.wysokosc = wysokosc; this.glebokosc = glebokosc; }

  46. Metoda finalize() • Dodatkowe czynności do wykonania gdy obiekt jestusuwany z pamięci, np. zwolnienie dostępu do pliku wykonywane są przez metodę finalize(): protected void finalize() { ... } • Metoda wywoływana jest przez odśmiecacz pamięcigdy ten usuwa niepotrzebny obiekt ze sterty.

  47. Pakiety

  48. Pakiety • Definicja: Pakiety - Służą organizacji modelu przez łączenie elementów specyfikacji w grupy. • Pliki są grupowane w pakiety, które tworzą swoją integralną przestrzeń nazw, • Klasy mogą mieć te same nazwy wewnątrz innych pakietów, a do pełnej identyfikacji używa się złożenia nazwy pakietu i nazwy własnej klasy • Pakiet - zbiornik na klasy: • dzieli przestrzeń nazw na rozłączne zbiory • kontroluje widoczność klas i składowych klas

  49. Pakiety cd… • Instrukcja pakietu umieszczona jako pierwsza komenda pliku źródłowego: package MojPakiet; • Wszystkie klasy w pliku należą do pakietu MojPakiet. • Inne pliki mogą posiadać tą samą instrukcję: pakiet rozkłada się na wiele plików. • Wszystkie pliki .class w pakiecie MojPakiet są zapisywane w katalogu MojPakiet. • Pakiet wielo-poziomowy: package pakiet1.pakiet11.pakiet111;

  50. Importowanie pakietów Dodatkowe klasy/pakiety, które będąpotrzebne w kodzie programu importujemy słowem kluczowym import: import java.util.*; • java.lang- pakiet automatyczniewłączany do każdego pliku Java • Pakiet java.lang zawiera klasę System • Klasa System zawiera pole:static PrintStream out; • Klasa PrintStream zawiera metodę:void println(String x)

More Related