Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Podobne dokumenty
Programowanie obiektowe

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Kurs programowania. Wykład 9. Wojciech Macyna

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Programowanie obiektowe

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Platformy Programistyczne Podstawy języka Java

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Wykład 4: Klasy i Metody

Dziedziczenie. dr Jarosław Skaruz

Podstawowe części projektu w Javie

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Obsługa wyjątków. Język C++ WW12

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Programowanie 2. Język C++. Wykład 3.

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Programowanie obiektowe

Tworzenie aplikacji w języku Java

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Microsoft IT Academy kurs programowania

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Dokumentacja do API Javy.

Podstawy programowania skrót z wykładów:

Języki i metody programowania Java. Wykład 2 (część 2)

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Wykład 7: Pakiety i Interfejsy

Część 4 życie programu

Programowanie obiektowe

Programowanie Komputerów

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Język C++ Różnice między C a C++

Plik klasy. h deklaracje klas

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Programowanie obiektowe

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Wykład 8: Obsługa Wyjątków

Wstęp do Programowania 2

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Podstawy programowania obiektowego

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe w C++ Wykład 12

Wstęp do programowania

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Programowanie w Internecie. Java

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Materiały do zajęć VII

Projektowanie klas c.d. Projektowanie klas przykład

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Języki programowania - podstawy

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Język C++ wykład VIII

I - Microsoft Visual Studio C++

Definicje klas i obiektów. Tomasz Borzyszkowski

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

Programowanie obiektowe

Wstęp do Programowania 2

Polimorfizm. dr Jarosław Skaruz

Słowa kluczowe i nazwy

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

PARADYGMATY PROGRAMOWANIA Wykład 3

Programowanie obiektowe

Podstawy Programowania Obiektowego

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Rozdział 4 KLASY, OBIEKTY, METODY

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

ROZDZIAŁ 2. Operatory

Definiowanie własnych klas

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

Wykład 8: klasy cz. 4

Transkrypt:

Wykład 1 3 marca 2016

Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface, native, new, package, private, protected, public, return, static, super, switch, synchronized, this, throw, throws, transient, try, volatile, while Typy podstawowe boolean, byte, char, double, float, int, long, short, void Pierwotne typy danych w Javie maja ustalona długość (w przeciwieństwie do C, gdzie może zależeć to od systemu). Nie ma typów całkowitych bez znaku. Nie ma także niejawnych konwersji między typami. Typy podstawowe maja swoje odpowiedniki obiektowe klasy opakowujace.

Operatory inkrementacja/dekrementacja ++, -- operatory arytmetyczne +, -, *, /, % operatory przesunięć <<, >>, >>> porównania <, <=, >, >=, ==,!= bitowe OR, AND, XOR &,, logiczne OR, AND &&, przypisanie = Przypisanie można łaczyć z większościa operatorów (jak w C). Klasa String Łańcuchy tekstowe w Javie sa zdefiniowane za pomoca klasy String. Ich obsługa jest mocno uproszczona można je przypisywać (operator =) i konkatenować (operator +). Przy próbie konkatenacji innych obiektów niż String wywoływana jest metoda tostring(). Łańcuchy można też wprost porównywać.

Przykład Dodaj.java 1 public class Dodaj { 2 public static void main ( String args []) { 3 int a, b; 4 if ( args. length!=2 ) { 5 System. out. println (" Zla liczba argumentow!" ); 6 return ; 7 } 8 try { 9 a = Integer. parseint ( args [0] ); 10 b = Integer. parseint ( args [1] ); 11 } 12 catch ( NumberFormatException ex ) { 13 System. out. println (" Zly format argumentow!" ); 14 return ; 15 } 16 System. out. println ( a+" + "+b+" = " +( a+b) ); 17 } 18 }

Definiowanie klas Podstawowe elementy klasy Pola jakie dane będzie przechowywać klasa. Metody jakie operacje będziemy wykonywać na danych w tej klasie. Konstruktory jak inicjować obiekty w danej klasie (konstruktor domyślny). Współdziałanie między klasami. Klasa Temperatura Mamy trzy powszechnie znane jednostki temperatury: Celsjusz, Kelvin, Fahrenheit. Zdefiniujmy klasę która będzie przechowywała temperaturę Celsjusza, ale miała też metody przystosowane do pozostałych jednostek.

Klasa Temperatura Temperatura.java 1 /* * Klasa do operacji na temperaturach */ 2 public class Temperatura { 3 private double t = 0.0; 4 5 public double Kelvin () { return t +273.15; } 6 public double Fahrenheit () { return 1.8* t +32; } 7 public double Celsjusz () { return t; } 8 9 public void set ( double t) { this. t = t; } 10 public void setf ( double t) { this. t = 5.0*( t -32)/9.0; } 11 public void setk ( double t) { this. t = t -273.15; } 12 13 // Konstruktory 14 Temperatura () { t = 0.0; } 15 Temperatura ( double t) { this. t = t; } 16 // Konwersja do String 17 public String tostring () { return Double. tostring ( t ); } 18 }

Klasa TemperaturaTest TemperaturaTest.java 1 public class TemperaturaTest { 2 public static void main ( String args [] ) { 3 Temperatura a; 4 Temperatura b = new Temperatura (); 5 Temperatura c = new Temperatura (100.0); 6 a = b; 7 System. out. println ( "C:"+a+"; K:"+a. Kelvin ()+ "; F:"+ 8 a. Fahrenheit ()+ ";" ); 9 System. out. println ( "C:"+c+"; K:"+c. Kelvin ()+ "; F:"+ 10 c. Fahrenheit ()+ ";" ); 11 c = b; 12 System. out. println ( "C:"+c+"; K:"+c. Kelvin ()+ "; F:"+ 13 c. Fahrenheit ()+ ";" ); 14 c. setf ( 0.0 ); 15 System. out. println ( "C:"+c+"; K:"+c. Kelvin ()+ "; F:"+ 16 c. Fahrenheit ()+ ";" ); 17 } 18 }

Ten sam program w C++ Temperatura.cpp 1 # include < iostream > 2 using namespace std ; 3 4 class Temperatura { 5 private : 6 double t; 7 public : 8 double Kelvin () { return t +273.15; } 9 double Fahrenheit () { return 1.8* t +32; } 10 double Celsjusz () { return t; } 11 void set ( double t) { this ->t = t; } 12 void setf ( double t) { this ->t = 5.0*( t -32)/9.0; } 13 void setk ( double t) { this ->t = t -273.15; } 14 // Konstruktory 15 Temperatura () { t = 0.0; } 16 Temperatura ( double t) { this ->t = t; } 17 18 friend ostream & operator < <( ostream & out, Temperatura * t) { return out < <(t ->t ); } 19 }; 20 int main ( int argc, char * argv []) { 21 Temperatura * a; 22 Temperatura * b = new Temperatura (); 23 Temperatura * c = new Temperatura (100.0); 24 25 a = b; 26 cout << "C:" << a << "; K:" << a -> Kelvin () << "; F:" << a -> Fahrenheit () << ";" << endl ; 27 cout << "C:" << c << "; K:" << c -> Kelvin () << "; F:" << c -> Fahrenheit () << ";" << endl ; 28 c = b; 29 cout << "C:" << c << "; K:" << c -> Kelvin () << "; F:" << c -> Fahrenheit () << ";" << endl ; 30 c -> setf ( 0.0 ); 31 cout << "C:" << c << "; K:" << c -> Kelvin () << "; F:" << c -> Fahrenheit () << ";" << endl ; 32 }

Dostęp Typy dostępu do komponentów klasy private dostępne tylko wewnatrz klasy w której jest zdefiniowane. (default) dostępne wewnatrz klasy i w obrębie pakietu. protected dostępne wewnatrz klasy i jej podklas oraz w obrębie pakietu. public dostępne zawsze. Dostęp do klas Zasadniczo klasy sa publiczne albo maja domyślny dostęp (w ramach pakietu).

Tworzenie obiektu Deklaracja zmiennej i przypisanie mu obiektu w języku Java 1 Temperatura t; 2 t = new Temperatura (); 3 Temperatura s = new Temperatura (20.1); Typ pola Domyślna wartość byte, short, int, long 0 float, double 0.0 char znak o kodzie 0 boolean false referencja innego typu null Deklaracja zmiennej i przypisanie mu obiektu w języku C++ 1 Temperatura t; 2 Temperatura & t1 = t; // t ma teraz rownoczesnie nazwe t1 3 Temperatura * t2 = new Temperatura (20.1);

Referencje Referencje sa wskaźnikami pamięci (w typowym przypadku 32-bitowymi). Jednak trzeba pamiętać, że w programie sa do nich przypisane typy obiektów na które wskazuja, więc nie można podstawić pod referencję jednego typu obiektu innego typu (kompilator potraktuje to jako bład). Niektóre języki obiektowe umożliwiaja takie zachowanie.

Dostęp do pól i metod Operator. Dostęp do komponentów jest realizowany za pomoca kropki: nazwa-obiektu(kropka)nazwa-metody. 1 Temperatura t = new Temperatura (); 2 3 t. set (30.1); 4 System. out. println ( t. Kelvin () ); Referencja this (Java) W definicji klasy aby odwołać się do pól i metod obiektu wewnatrz jego samego używamy albo bezpośrednio nazw pól albo używamy referencji this (w przypadkach kiedy mamy przesłonięte nazwy pól). Wskaźnik this (C++) W C++ this jest wskaźnikiem. Dla wskaźników operator dostępu ma postać ->, np. this->t.

Komponenty statyczne Pola i metody statyczne nie sa przypisane do konkretnego obiektu a do klasy jako całości. Ich wywołanie i użycie nie wymaga stworzenia obiektu, a wszystkie stworzone obiekty widza tylko jedno (to samo) pole. Wywołanie komponentu statycznego bez tworzenia obiektu ma postać: nazwa_klasy.nazwa_komponentu_statycznego // Java nazwa_klasy::nazwa_komponentu_statycznego // C++ Maszyna Wirtualna Javy uruchamiana dla danej klasy szuka w niej i uruchamia statyczna metodę main.

Wyjatki Metody w sytuacjach wystapienia błędu moga zgłaszać wyjatki. Wyjatek przerywa działanie podprogramu i jest zwracany wyżej. Deklarowanie wyjatku class MojException extends Exception {}; Deklarowanie użycia wyjatku przez metodę void mojametoda() throws MojException; Tak zadeklarowana metoda może być użyta tylko w środowisku try{ } a sam wyjatek może być przechwycony poleceniem catch. Wywołanie wyjatku throw new MojException();

Przykład 1 class Moj1Exception extends Exception {}; 2 class Moj2Exception extends Exception {}; 3 4 class TablicaBool { 5 private boolean [] t; 6 public boolean getvalue ( int i) throws Moj2Exception { 7 if (( i <0) ( i >=t. length )) throw new Moj2Exception (); 8 return t[ i ]; 9 } 10 public void setvalue ( int i, boolean b) throws Moj2Exception { 11 if (( i <0) ( i >=t. length )) throw new Moj2Exception (); 12 t[ i] = b; 13 } 14 TablicaBool ( int i) throws Moj1Exception { 15 if (i <=0) throw new Moj1Exception (); 16 t = new boolean [ i ]; 17 } 18 }

Przykład cd 1 public class TablicaBoolTest { 2 public static void main ( String [] arg ) { 3 TablicaBool t; 4 try { t = new TablicaBool (2); } 5 catch ( Moj1Exception e ) { 6 System. out. println ( " Zle inicjowanie tablicy!" ); 7 return ; 8 } 9 try { t. setvalue (20, true ); } 10 catch ( Moj2Exception e ) { 11 System. out. println ( " Przekroczenie zakresu " ); } 12 try { t = new TablicaBool (0); t. setvalue (20, true ); } 13 catch ( Moj2Exception e ) { 14 System. out. println ( " Przekroczenie zakresu " ); } 15 catch ( Moj1Exception e ) { 16 System. out. println ( " Zle inicjowanie tablicy!" ); 17 return ; } 18 } 19 }

Ten sam program w C++ TablicaBool.cpp (1) 1 # include < iostream > 2 # include < string > 3 using namespace std ; 4 class TablicaBool { 5 private : 6 bool *t; 7 public : 8 bool getvalue ( int i ) throw ( string ) { 9 if ((i <0) ( i >= sizeof t )) throw ( string )" Zly indeks "; 10 return t[ i ]; 11 } 12 void setvalue ( int i, bool b ) throw ( string ) { 13 if ((i <0) ( i >= sizeof t )) throw ( string )" Zly indeks "; 14 t[ i] = b; 15 } 16 TablicaBool ( int i ) throw ( string ) { 17 if (i <=0) throw ( string )" Zly rozmiar tablicy "; 18 t = new bool (i ); 19 } 20 ~ TablicaBool () { delete t; } 21 };

Ten sam program w C++ TablicaBool.cpp (2) 22 int main ( int argc, char * argv [] ) { 23 TablicaBool * t; 24 int n = 2; 25 26 try { t = new TablicaBool ( n ); } 27 catch ( string w) { cout << w << endl ; return 1; } 28 try { t -> setvalue (20, true ); } 29 catch ( string w) { cout << w << endl ; } 30 delete t; 31 n = 0; 32 try { t = new TablicaBool (0); t - > setvalue (20, true ); } 33 catch ( string w) { cout << w << endl ; return 1; } 34 }

Konstruktory Konstruktor domyślny (metoda o nazwie klasy) Jeśli nie zdefiniujemy w klasie własnych konstruktorów to będzie ona miała konstruktor domyślny, który nada wszystkim polom wartości domyślne. Zdefiniowanie chociaż jednego własnego konstruktora powoduje, że konstruktor domyślny nie jest już zdefiniowany. Każdy konstruktor musi się różnić od innych lista argumentów.

Destruktory Destruktor protected void finalize() throws Throwable (Java) Ponieważ Java ma Garbage Collector definiowanie destruktorów w większości przypadków nie jest konieczne. Jeśli jednak potrzebujemy destruktora to nadpisujemy metodę finalize która jest wywoływana przez Garbage Collector w chwili zwalniania pamięci obiektu. Destruktor nazwa_klasy() (C++) Destruktor w C++ jest wywoływany przy wyjściu z zakresu widzialności zmiennej obiektowej lub przy zwalnianiu obiektu słowem kluczowym delete.

Przykład (Java) 1 class Test { 2 public int a; 3 Test ( int i) { a=i; System. out. println ( " Utworzono " +a ); } 4 protected void finalize () throws Throwable { 5 System. out. println ( " Zniszczono "+a ); } 6 } 7 public class DestruktorTest { 8 public static void main ( String [] arg ) { 9 Test a = new Test (1), b = new Test (2), c = new Test (3); 10 11 a = b; 12 System. gc (); 13 b = c; 14 a = new Test (4); 15 System. gc (); 16 b = c = null ; 17 System. gc (); 18 } 19 }

Przykład (C++) 1 # include < iostream > 2 using namespace std ; 3 4 class Test { 5 public : 6 int a; 7 Test ( int a ) { 8 this - >a=a; 9 cout << " Utworzono " << a << endl ; 10 } 11 ~ Test () { cout << " Zniszczono " << a << endl ; } 12 }; 13 int main ( int argc, char * argv []) { 14 Test a (1); 15 Test * b = new Test (2); 16 17 delete b; 18 }

Tworzenie obiektów C++ Założenia Zakładamy, że jest zdefiniowany publiczny konstruktor domyślny i konstruktor akceptujacy jeden argument typu int. W ostatnich dwóch przypadkach musi istnieć konstruktor kopiujacy Przykłady tworzenia obiektów Klasa a; Klasa a(5); Klasa a = Klasa(); Klasa a = Klasa(5); Klasa* pa = new Klasa; Klasa* pa = new Klasa(); Klasa* pa = new Klasa(5); Klasa b = a; Klasa b(a);