Style programowania - krótki przeglad

Podobne dokumenty
Style programowania - krótki przeglad

Style programowania, geneza języka C++

Geneza C++, hermetyzacja struktur danych

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Pola i metody statyczne

Szablony funkcji i szablony klas

Referencje do zmiennych i obiektów

Przesłanianie nazw, przestrzenie nazw

Podstawy Programowania Obiektowego

Wyliczanie wyrażenia obiekty tymczasowe

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

Programowanie obiektowe - 1.

Szablon klasy std::vector

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Podejście obiektowe - podstawowe pojęcia

Geneza powstania języka C++

Operacje wejścia/wyjścia odsłona pierwsza

Konstruktor kopiujacy

Szablon klasy std::list

Operacje wejścia/wyjścia (odsłona druga) - pliki

Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Wykład 8: klasy cz. 4

Geneza powstania języka C++

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Rzutowanie i konwersje

Lista dwukierunkowa - przykład implementacji destruktorów

Klasa, metody, rozwijanie w linii

Wprowadzenie do szablonów klas

Klasa, metody, rozwijanie w linii

TEMAT : KLASY DZIEDZICZENIE

Szablony funkcji i klas (templates)

Materiały do zajęć VII

Hermetyzacja oraz pola i metody statyczne

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

Obiekty i metody stałe

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Dziedziczenie jednobazowe, poliformizm

Język programowania. Andrzej Bobyk

Technologie obiektowe

Wykład 5: Klasy cz. 3

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Modelowanie i Programowanie Obiektowe

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Wykład 9: Polimorfizm i klasy wirtualne

Wstęp do programowania obiektowego. Wykład 2

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Technologie i usługi internetowe cz. 2

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Zaawansowane programowanie w C++ (PCP)

Podstawy Języka Java

Wstęp do Programowania 2

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

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

Podstawy programowania. Wprowadzenie

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

Paradygmaty programowania

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Szablony klas, zastosowanie szablonów w programach

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Definiowanie własnych klas

Zaawansowane programowanie w C++ (PCP)

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

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Programowanie obiektowe. Wprowadzenie

Enkapsulacja, dziedziczenie, polimorfizm

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Historia modeli programowania

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Język C++ Programowanie obiektowe

Programowanie Obiektowe i C++

Zad. 3: Rotacje 2D. Demonstracja przykładu problemu skończonej reprezentacji binarnej liczb

Wykład 4: Klasy i Metody

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Języki i paradygmaty programowania. I. Wprowadzenie

Każdy z nich posiada swoje parametry. W przypadku silnika może to być moc lub pojemność, w przypadku skrzyni biegów można mówić o skrzyni

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

Programowanie współbieżne i rozproszone

private - oznacza, że wszystkie elementy klasy bazowej zmieniają się w prywatne.

Do czego służą klasy?

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Przykłady oprogramowania wykorzystujacego Qt

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

Transkrypt:

Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłacznie do własnych prywatnych potrzeb i może on być kopiowany wyłacznie w całości, razem z niniejsza strona tytułowa.

Ważniejsze style programowania 1 Programowanie proceduralne Nacisk kładzie się na przetwarzanie, tzn. zbudowania algorytmu potrzebnego do wykonania wymaganych obliczeń. Programowanie modularne Uwypukla powiazanie danych z procedurami oraz ukrywa dane, które wykorzystywane sa tylko w pewnych blokach obliczeniowych reprezentowanych przez moduły. Programowanie z abstrakcja danych Zakłada możliwość definiowania typów, które maja te same własności jak typy wbudowane. Programowanie obiektowe Tworzenie struktur pochodnych poprzez dziedziczenie z możliwościa modyfikacji dzięki polimorfizmowi. Hermetyzacja wybranych struktur. Programowanie uogólnione Umożliwia tworzenie parametryzowanych struktur i funkcji/procedur, dla których parametrami jest typ danych.

Programowanie z wykorzystaniem podprogramów 2 Styl charakterystyczny dla przypadku wykorzystywania asemblera oraz wczesnej wersji Basic a.

Programowanie z wykorzystaniem podprogramów 3 Wielość wzajemnych powiazań prowadzi do tworzenia się nieczytelnych konstrukcji programów.

Programowanie z wykorzystaniem podprogramów 4 Zmienne lokalne poprawiaja wykorzystanie pamięci oraz czytelność programu.

Programowanie proceduralne 5 Paradygmat programowania proceduralnego: Zdecyduj jakie chcesz mieć procedury; stosuj najlepsze algorytmy jakie możesz znaleźć. Przykład języków programowania wspierajacych ten paradygmat: Pascal, C, Java, C++, Python, Perl itd.

Programowanie proceduralne 6 Podstawowe wady czystego programowania proceduralnego. Brak możliwości wyróżnienia powiazań między strukturami danych, a procedurami operujacymi na nich. Konieczność stosowania różnych nazw procedur nawet w przypadku, gdy wykonuja te same operacje, a jedyna różnica jest typ danych, na których wykonywana jest ta operacja. Umieszczanie wszystkich elementów w jednakowym obszarze zasięgu ważności definicji uniemożliwia hermetyzację wybranych partii programy i łatwego rozdzielenia całego zadania na poszczególne podzadania.

Programowanie modularne 7 Zbiór powiazanych ze soba procedur, struktur danych oraz zmiennych nazywamy modułem. W tym sensie moduł realizuje centralizację struktur danych oraz procedur i funkcji obsługujacych wspomniane struktury danych.

Programowanie modularne 8 Ten typ programowania pozwala ukryć pomocnicze funkcje i struktury danych. Możliwe jest dość precyzyjne określenie co jest udostępniane na zewnatrz i z czego dany moduł korzysta. Pozwala to ukryć ewentualne późniejsze modyfikacje struktur wewnętrznych.

Programowanie modularne 9 Paradygmat programowania modularnego: Zdecyduj jakie chcesz mieć moduły; podziel program w taki sposób, aby ukryć dane w modułach. Przykład języków programowania wspierajacych ten paradygmat: Modula 2, Ada, C, Java, C++

10 Programowanie modularne (najważniejsze cechy) Ukrywanie funkcji, struktur danych oraz zmiennych majacych znacznie lokalne w danym module Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnatrz modułu widoczne sa jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wada tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji. Możliwość odizolowania się od nazw funkcji i zmiennych modułu używanych w innych modułach. Możliwość precyzyjnego określenia co z danego modułu jest widoczne i udostępniane na zewnatrz, a co nie. Mechanizm ten pozwala również określić co dany moduł importuje z innych modułów. Łatwiejsza organizacja pracy zespołowej.

Programowanie modularne 11 Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrola jednego modułu będacego zarzadc a danego typu. Daje to jednak wciaż znaczaco gorsze wsparcie niż dla typów wbudowanych. Wady czystego programowania modularnego: brak możliwości stosowania operatorów, w przypadku stosowania deskryptorów brak możliwości ścisłej kontroli typów na poziomie kompilacji, brak możliwości określenia dopuszczalności domyślnych konwersji oraz ich zdefiniowania.

Abstrakcja typów danych 12 Podejście oparte na abstrakcji danych pozwala traktować na równi typy wbudowane i typy definiowane przez programistę. Pozwala również bezpośrednio odwoływać się do struktur danych i dokonywanych na nich operacji.

Abstrakcja typów danych 13 Paradygmat programowania z zastosowaniem abstrakcji danych: Zdecyduj jakie chcesz mieć typy; dla każdego typu dostarcz pełny zbiór operacji. Przykład języków programowania wspierajacych ten paradygmat: Ada, Clu, C++

Abstrakcja typów danych 14 Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które moga być dobrze izolowane od reszty programu. Zawieraja one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich.

Abstrakcja typów danych 14 Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które moga być dobrze izolowane od reszty programu. Zawieraja one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich. Podstawowa wada jest brak elastyczności.

Abstrakcja typów danych 14 Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które moga być dobrze izolowane od reszty programu. Zawieraja one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich. Podstawowa wada jest brak elastyczności. Przykład: Konstruujac typy MacierzWJ (transformacje wektorów wyrażonych we współrzędnych jednorodnych) oraz Macierz4x4 należy zdefiniować oddzielne struktury danych wraz z metodami i operacjami, choć MacierzWJ jest jedynie uszczegółowieniem typu Macierz4x4.

Programowanie obiektowe 15 Podejście oparte na podejściu obiektowym umożliwia budowanie nowych typów danych na bazie wcześniej zdefiniowanych struktur.

Programowanie obiektowe 16 Paradygmat programowania obiektowego: Zdecyduj jakie chcesz mieć klasy; dla każdej klasy dostarcz pełny zbiór operacji; korzystajac z mechanizmu dziedziczenia, jawnie wskaż to, co jest wspólne. Przykład języków programowania wspierajacych ten paradygmat: C++, Java, Python

Programowanie obiektowe 17 Podstawowe cechy programowania obiektowego: dziedziczenie możliwość tworzenia nowych struktur danych z wykorzystaniem struktur wcześniej zdefiniowanych wraz ze wszystkimi ich atrybutami i metodami.

Programowanie obiektowe 17 Podstawowe cechy programowania obiektowego: dziedziczenie możliwość tworzenia nowych struktur danych z wykorzystaniem struktur wcześniej zdefiniowanych wraz ze wszystkimi ich atrybutami i metodami. hermetyzacja możliwość ograniczanie dostępu do wybranych struktur danych. Pozwala to definiować ściśle określony interfejs dostępu do tych struktur.

Programowanie obiektowe 17 Podstawowe cechy programowania obiektowego: dziedziczenie możliwość tworzenia nowych struktur danych z wykorzystaniem struktur wcześniej zdefiniowanych wraz ze wszystkimi ich atrybutami i metodami. hermetyzacja możliwość ograniczanie dostępu do wybranych struktur danych. Pozwala to definiować ściśle określony interfejs dostępu do tych struktur. polimorfizm możliwość modyfikacji metod (określanych mianem metod wirtualnych) w strukturach bazowych poprzez ich redefiniowanie w strukturach pochodnych.

Programowanie obiektowe 18 Czy programowanie obiektowe może mieć jakieś wady?

Programowanie obiektowe 18 Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciaż mało elastyczne!!!! :-0

Programowanie obiektowe 18 Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciaż mało elastyczne!!!! :-0 We wcześniejszym przykładzie typy Macierz4x4 i MacierzWJ zostały zdefiniowane dla typu float. Aby zdefiniować je dla typu double należy wszystko na nowo przepisać. :-(

Programowanie obiektowe 18 Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciaż mało elastyczne!!!! :-0 We wcześniejszym przykładzie typy Macierz4x4 i MacierzWJ zostały zdefiniowane dla typu float. Aby zdefiniować je dla typu double należy wszystko na nowo przepisać. :-( Czy nie można byłoby stworzyć ogólnych mechanizmów nie tylko definiowania struktur, ale również pisania funkcji, np. funkcji umożliwiajacych sortowanie dowolnych struktur bez konieczności dokonywania rzutowania lub konwersji typów?

Programowanie uogólnione 19 Przykład z biblioteki C realizacji uogólnionych algorytmów dla tworzenia, manipulowania i przeszukiwania struktury drzewa binarnego. #include <search.h> void *tsearch(const void *key, void **rootp, int(*compar)(const void *, const void *)); void *tfind(const void *key, const void **rootp, int(*compar)(const void *, const void *)); void *tdelete(const void *key, void **rootp, int(*compar)(const void *, const void *)); void twalk(const void *root, void(*action)(const void *nodep, const VISIT which, const int depth));

Programowanie uogólnione 20 Programowanie uogólnione pozwala tworzyć uniwersalne struktury, w których nie ma (lub sa one zminimalizowane) ograniczeń na typ pól. Daje możliwość skoncentrowania się na ogólnych mechanizmach manipulowania strukturami danych. Można stworzyć np. wzorzec listy.

21 Programowanie uogólnione Konkretyzacja typu następuje w momencie odwołania się do wzorca wraz ze wszystkimi parametrami. Sa one nazwami typów składowych. Odwołanie następuje wraz z deklaracja obiektu danej klasy. Nazwę typu można czynić bardziej wygodna używajac typedef.

Programowanie uogólnione 22 Paradygmat programowania uogólnionego: Zdecyduj jakie chcesz mieć algorytmy; parametryzuj je w taki sposób, by działały dla różnych typów i struktur.

Programowanie uogólnione 22 Paradygmat programowania uogólnionego: Zdecyduj jakie chcesz mieć algorytmy; parametryzuj je w taki sposób, by działały dla różnych typów i struktur. Przykład języków programowania wspierajacych ten paradygmat: C++ Programowanie uogólnione jest podstawowa technika programowania użyta przy tworzeniu standardowej biblioteki szablonów (STL), która jest jednym z podstawowych składników ANSI/ISO C++.