Programowanie Obiektowe – Wykład 6

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

Programowanie obiektowe
Klasy abstrakcyjne i interfejsy
Programowanie obiektowe PO PO - LAB 2 Wojciech Pieprzyca.
Dzisiejszy wykład Wyjątki.
Programowanie obiektowe
Metody wirtualne.
Wzorce.
Prowadzący: mgr inż. Elżbieta Majka
Dziedziczenie. Po co nam dziedziczenie? class osoba { char * imie, char * imie, * nazwisko; * nazwisko;public: void wypisz_imie(); void wypisz_imie();
Programowanie w środowisku sieciowym
Programowanie Obiektowe w Javie (c.d.)
Programowanie obiektowe w Javie
Szablony (wzorce) Przykład 1: Szablon klasy -
Licznik template<class Count_Type> class Count { public:
OOP - programowanie zorientowane obiektowo w VB.NET
Serwery Aplikacji ASP .NET Web Objects Arkadiusz Popa.
DZIEDZICZENIE · klasy bazowe i klasy pochodne WyświetlAutora( ) Autor
Bartosz Walter Inżynieria oprogramowania Lecture XXX JavaTM – część II Bartosz Walter
Dziedziczenie i jego rodzaje
C++ wykład 5 ( ) Dziedziczenie.
C++ wykład 6 ( ) Polimorfizm.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Język C# Copyright, 2004 © Adam Czajka.
Programowanie urządzeń mobilnych – wykład IV
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Podstawy programowania II
Tworzenie aplikacji mobilnych
Programowanie obiektowe – zastosowanie języka Java SE
WPROWADZENIE W ŚWIAT OBIEKTÓW
Java – coś na temat Klas Piotr Rosik
Dziedziczenie Marek Serek Dziedziczenie Dziedziczenie to jeden z fundamentów programowania obiektowego. Umożliwia sprawne i łatwe wykorzystywanie.
Dziedziczenie Maciek Mięczakowski
Seminarium problemowe
INTERFEJSY I KLASY WEWNĘTRZNE
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Warsztaty C# Część 6 Grzegorz Piotrowski Grupa .NET PO
Programowanie obiektowe 2013/2014
Kurs języka C++ – wykład 3 ( )
Kurs języka C++ – wykład 9 ( )
Programowanie w języku C++
Kurs języka C++ – wykład 5 ( )
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Waldemar Bartyna 1 Programowanie zaawansowane Strukturalna obsługa wyjątków.
Technologie internetowe Wykład 7 Kontrola danych użytkownika.
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
K URS JĘZYKA C++ – WYKŁAD 6 ( ) Polimorfizm.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Dziedziczenie wielobazowe. dana klasa może mieć kilka bezpośrednich klas bazowych: dana klasa może mieć kilka bezpośrednich klas bazowych: kolorpołożenie.
Programowanie Zaawansowane
Zestaw pytań nr. 3 Typy generyczne Wyjątki OPRACOWALI: JAKUB GRYCZEWSKIKINGA ROSA DANIEL KAPTEJNYWOJCIECH ŁĘCZYCKI
Dziedziczenie Wykład 7 Dziedziczenie sekwencyjne
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
Waldemar Bartyna Pytania egzaminacyjne 1.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Dzisiejsze zajęcia będą wyjątkowe…
Programowanie Obiektowe – Wykład 9
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
(według:
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
PGO Dziedziczenie Michail Mokkas.
Zapis prezentacji:

Programowanie Obiektowe – Wykład 6 dr Piotr Jastrzębski Wydział Matematyki i Informatyki http://wmii.uwm.edu.pl/~piojas/ piojas@matman.umw.edu.pl

Tematyka wykładu Polimorfizm Wyjątki – obsługa błędów (wstęp)

Filary/założenia programowania obiektowego Abstrakcja Hermetyzacja Dziedziczenie Polimorfizm

Polimorfizm poli – wiele morf – postać wielopostaciowość Polimorfizm - zdolność obiektu do różnych zachowań Cel: uproszczenie i skrócenie kodu programu

Polimorfizm w C# statyczny przeciążenie funkcji przeciążenie operatorów dynamiczny funkcje wirtualne funkcje abstrakcyjne

Polimorfizm statyczny w tej samej klasie może istnieć wiele metod o tej samej nazwie metody różnią się parametrami, wykonanie metod zależy od parametrów zachodzi w trakcie kompilacji programu nie mamy wpływu na zachowanie metod w trakcie działania programu

Przykład static string OpiszTyp() { return "Metoda bez argumentów"; } static string OpiszTyp(int x) return "Liczba całkowita"; static string OpiszTyp(string x) return "Łańcuch znaków"; static string OpiszTyp(double x, int y) return "Liczba double i liczba całkowita";

Polimorfizm dynamiczny polega na różnym zachowaniu metod o tej samej sygnaturze w klasach będących w relacji dziedziczenia. metody o tej samej sygnaturze – metody o tej samej nazwie, typie zwracanym i parametrach w zależności od typu referencji wykonywana jest odpowiednia implementacja (instrukcje w metodzie) metody polimorficzne metody wirtualne metody abstrakcyjne

Przykład – przesłanianie zwykłej metody class Pojazd { public void Jedz() { Console.WriteLine("Jadę pojazdem"); } } class Samochod: Pojazd public void Jedz() { Console.WriteLine("Jadę samochodem"); }

Pojazd p1 = new Pojazd(); p1. Jedz(); Samochod s1 = new Samochod(); s1 Pojazd p1 = new Pojazd(); p1.Jedz(); Samochod s1 = new Samochod(); s1.Jedz(); Pojazd sp1 = new Samochod(); sp1.Jedz();

Rozwiązanie – nadpisanie (ukrycie) metody - new class Pojazd { public void Jedz() { Console.WriteLine("Jadę pojazdem"); } } class Samochod: Pojazd public new void Jedz() { Console.WriteLine("Jadę samochodem"); }

Wady nadpisywania brak elastyczności kodu przy dużej hierarchii dziedziczenia i rzutowaniach wykonywana jest metoda z klasy bazowej Nadpisywanie nie jest polimorfizmem.

Metoda wirtualna oznaczona słowem kluczowym virtual włącza mechanizm polimorfizmu dynamicznego tworzymy ją w klasie bazowej w klasach pochodnych przesłaniamy metody wirtualne za pomocą słowa kluczowego override przesłonięcie nie jest obowiązkowe, w razie jego braku zostanie wywołana metoda klasy bazowej metody statyczne ani prywatne nie mogą być wirtualne metody, które nie są wirtualne, nie można przesłonić za pomocą override

class Pojazd { public virtual void Jedz() { Console class Pojazd { public virtual void Jedz() { Console.WriteLine("Jadę pojazdem"); } } class Samochod: Pojazd public override void Jedz() { Console.WriteLine("Jadę samochodem"); }

Pojazd p1 = new Pojazd(); p1. Jedz(); Samochod s1 = new Samochod(); s1 Pojazd p1 = new Pojazd(); p1.Jedz(); Samochod s1 = new Samochod(); s1.Jedz(); Pojazd sp1 = new Samochod(); sp1.Jedz();

Po co? dajemy informację dla innej osoby zajmującej się kodem przy tworzeniu klasy potomnych mamy elastyczność: możemy zostawić to jak jest w klasie bazowej lub przesłonić

Metody wirtualne w klasie Object w C# każda klasa dziedziczy niejawnie z klasy Object public class Object { /* składowe wirtualne */ virtual public bool Equals(object o); virtual protected void Finalize(); virtual public string ToString(); /* itp.. */ }

Metody abstrakcyjne poprzedzone słowem kluczowym abstract zdefiniowane w klasie bazowej nie zawierają ciała metody (podobnie jak przy interfejsach) mogą być zadeklarowane tylko w klasie abstrakcyjnej (poprzedzonej słowem abstract) nie możemy stworzyć egzemplarza (obiektu) klasy abstrakcyjnej (podobnie jak przy interfejsach), ale możemy dziedziczyć po klasie abstrakcyjnej klasa abstrakcyjna może posiadać zwykłe metody (z implementacją) klasa pochodna do klasy abstrakcyjnej musi przesłonić wszystkie metody abstrakcyjne

abstract class Pojazd { public abstract void Jedz(); } class Samochod: Pojazd public override void Jedz() { Console.WriteLine("Jadę samochodem"); } class Rower : Pojazd public override void Jedz() { Console.WriteLine("Jadę rowerem"); }

Nie możemy stworzyć obiektu klasy abstrakcyjnej Pojazd p1 = new Pojazd();

List<Pojazd> pojazdy = new List<Pojazd>(); pojazdy List<Pojazd> pojazdy = new List<Pojazd>(); pojazdy.Add(new Rower()); pojazdy.Add(new Samochod()); foreach(var element in pojazdy) { element.Jedz(); }

Wirtualne czy abstrakcyjne? tam gdzie może dojść do powielenia kodu w klasie potomnej chcemy stworzyć obiekty klasy bazowej np. ToString() abstrakcyjne w sytuacjach gdy nie powielamy kodu tworzenie obiektów klasy bazowej nie ma sensu

Przykład abstract public class Figura { protected int a, b; abstract public int Pole(); } public class Kwadrat : Figura public ovverride int Pole() { return a * a; } public class Trojkat : Figura public override int Pole() { return 1 / 2 * a * b; }

Łamigłówka http://www.p-programowanie.pl/c-sharp/metody- wirtualne-abstrakcyjne-i-polimorfizm/

Wyjątki i obsługa błędów Wyjątek - mechanizm kontroli przepływu występujący w językach programowania i służący do obsługi zdarzeń wyjątkowych

Blok try catch try { // kod } catch // kod w razie wystąpienia wyjątku

try { //kod } catch (Exception e) Console.WriteLine(e.Message);

Właściwości klasy System.Exception Data Dodatkowe informacje na temat źródła wystąpienia wyjątku. HelpLink Umożliwia odczytanie lub ustawienie linka (np. do pomocy) związanego z błędem. Message Komunikat błędu. Source Umożliwia odczytanie lub przypisanie nazwy aplikacji lub obiektu, w którym wystąpił błąd. TargetSite Umożliwia odczytanie metody, w której wystąpił błąd.

Celowe wywołanie wyjątku try { throw new IndexOutOfRangeException(); } catch (Exception e) Console.WriteLine(e.Message);

Własna klasa na wyjątki – dziedziczy po System.Exception public class NaszWyjątekException : System.Exception { public NaszWyjątekException (string Message) : base(Message) this.Source = „Nasz własny wyjątek"; this.HelpLink = "http://google.pl/"; }