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

Szablony funkcji i szablony klas

Pola i metody statyczne

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Referencje do zmiennych i obiektów

Przesłanianie nazw, przestrzenie nazw

Podstawy Programowania Obiektowego

Wyliczanie wyrażenia obiekty tymczasowe

Wprowadzenie do szablonów klas

Szablon klasy std::vector

Konstruktor kopiujacy

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

Szablon klasy std::list

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

Programowanie obiektowe - 1.

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

Hermetyzacja oraz pola i metody statyczne

Szablony funkcji i klas (templates)

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

Rzutowanie i konwersje

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Wykład 8: klasy cz. 4

Wstęp do Programowania 2

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

Geneza powstania języka C++

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

Lista dwukierunkowa - przykład implementacji destruktorów

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

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

TEMAT : KLASY DZIEDZICZENIE

Obiekty i metody stałe

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

Wstęp do programowania obiektowego. Wykład 2

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

Klasa, metody, rozwijanie w linii

Podejście obiektowe - podstawowe pojęcia

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

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

Klasa, metody, rozwijanie w linii

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

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

Szablony klas, zastosowanie szablonów w programach

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

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

Materiały do zajęć VII

Geneza powstania języka C++

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

Wykład 5: Klasy cz. 3

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

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

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

Język ludzki kod maszynowy

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

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

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

Wykład 4: Klasy i Metody

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

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

Definiowanie własnych klas

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

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Technologie cyfrowe semestr letni 2018/2019

Zaawansowane programowanie w C++ (PCP)

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.

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

C++ Przeładowanie operatorów i wzorce w klasach

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

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

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

Dziedziczenie jednobazowe, poliformizm

Zaawansowane programowanie w C++ (PCP)

Technologie i usługi internetowe cz. 2

Technologie obiektowe

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

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

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Wyjątki (exceptions)

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Programowanie obiektowe

Języki i paradygmaty programowania

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

Paradygmaty programowania

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

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

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie w języku C++ Podstawowe paradygmaty programowania

Enkapsulacja, dziedziczenie, polimorfizm

Podstawy Języka Java

Programowanie komputerowe. Zajęcia 7

Szablony. Szablony funkcji

Technologie cyfrowe semestr letni 2018/2019

Abstrakcyjny typ danych

Transkrypt:

Style programowania - krótki przeglad Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl 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 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. Style programowania - krótki przeglad 1

Programowanie z wykorzystaniem podprogramów (Zmienne globalne) suma zm zm1 zm_tmp wynik Program glowny 104 let zm1 = 2*suma + 5; 105 if zm1 = 10 then let zm = 0; 106 subroutine 4591 107 if wynik = zm1 then beep; Podprogram 4591 let zm_tmp = 2*zm1/31; 4595 if zm_tmp = 3.5 then let zm1 = zm_tmp; 4600 subroutine 7500 4605 subroutine 8225 4610 return; Podprogram 4595 if zm_tmp = 3.5 then let zm1 = zm_tmp; 4610 return; Podprogram 8225 if zm_tmp = 3.5 then let zm1 = zm_tmp; 8554 return; Styl charakterystyczny dla przypadku wykorzystywania asemblera oraz wczesnej wersji Basic a. Style programowania - krótki przeglad 2

Programowanie z wykorzystaniem podprogramów (Zmienne globalne) suma zm zm1 zm_tmp wynik Program glowny 104 let zm1 = 2*suma + 5; 105 if zm1 = 10 then let zm = 0; 106 subroutine 4591 107 if wynik = zm1 then beep; Podprogram 4591 let zm_tmp = 2*zm1/31; 4595 if zm_tmp = 3.5 then let zm1 = zm_tmp; 4600 subroutine 7500 4605 subroutine 8225 4610 return; Podprogram 4595 if zm_tmp = 3.5 then let zm1 = zm_tmp; 4610 return; Podprogram 8225 if zm_tmp = 3.5 then let zm1 = zm_tmp; 8554 return; Wielość wzajemnych powiazań prowadzi do tworzenia się nieczytelnych konstrukcji programów. Style programowania - krótki przeglad 3

Programowanie z wykorzystaniem podprogramów (Zmienne globalne) IdentManp KatObrotu PozycjaEfektora Ilosc WspX program Manipulator(input,output); begin PozycjonujManipulator(1); ObrocRamie(1,23); end. procedure PozycjonujManipulator(int ID); var Ilosc : integer; WspX :real; begin UstawPodstaweManipulatora(ID); PozycjonujRamiona(ID); end; procedure OtworzChwytak(int ID); begin end; Obrot procedure ObrocRamie(ID :integer; Kat :real); var Obrot :real; begin end; Zmienne lokalne poprawiaja wykorzystanie pamięci oraz czytelność programu. Style programowania - krótki przeglad 4

Programowanie proceduralne 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. Style programowania - krótki przeglad 5

Programowanie proceduralne 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. Style programowania - krótki przeglad 6

Programowanie modularne Modul Glowny suma MacierzPodstawy ID_MacEfektora ID_Przegub1 wynik M1 nacznik int main() MacierzWJ M1; float nacznik; M1 =!M1; void Transformuj(MacierzWJ &M) if (M.nacznik()). M.Odwrotnosc(); void Wyswietl(MacierzWJ &M) Modul: Manipulator int Przegub[5]; PolozeniePodstawy Stan TransX Eksport: void ObrocPrzegub(int, float) void PrzesunPodstawe_X(float Tx) if (M0.TranslacjaX()). Modul: MacierzWJ MacierzBiezaca StosMacierzy[7]; float nacznik(int ID) Eksport: bool Odwrotnosc(int ID) if (( = nacznik(id))) ElementMac. void ZwiekszSkale(MacierzWJ &M) void Transformuj(MacierzWJ &M) if (M.nacznik()). M =!M; void OtworzChwytak() void TranslacjaX(int ID) bool UtworzMacierz() void SkalujRamie(MacierzWJ &M) void Zamien(ind ID1, int ID2) ElementMac 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. Style programowania - krótki przeglad 7

Programowanie modularne Modul Glowny suma MacierzPodstawy ID_MacEfektora ID_Przegub1 wynik M1 nacznik int main() MacierzWJ M1; float nacznik; M1 =!M1; void Transformuj(MacierzWJ &M) if (M.nacznik()). M.Odwrotnosc(); void Wyswietl(MacierzWJ &M) Modul: Manipulator int Przegub[5]; PolozeniePodstawy Stan TransX Eksport: void ObrocPrzegub(int, float) void PrzesunPodstawe_X(float Tx) if (M0.TranslacjaX()). Modul: MacierzWJ MacierzBiezaca StosMacierzy[7]; float nacznik(int ID) Eksport: bool Odwrotnosc(int ID) if (( = nacznik(id))) ElementMac. void ZwiekszSkale(MacierzWJ &M) void Transformuj(MacierzWJ &M) if (M.nacznik()). M =!M; void OtworzChwytak() void TranslacjaX(int ID) bool UtworzMacierz() void SkalujRamie(MacierzWJ &M) void Zamien(ind ID1, int ID2) ElementMac 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. Style programowania - krótki przeglad 8

Programowanie modularne 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++ Style programowania - krótki przeglad 9

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. Style programowania - krótki przeglad 10

Programowanie modularne 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. Style programowania - krótki przeglad 11

Abstrakcja typów danych Modul Glowny suma MacierzPodstawy ID_MacEfektora ID_Przegub1 wynik M1 nacznik int main() MacierzWJ M1; float nacznik; M1 =!M1; void Transformuj(MacierzWJ &M) if (M.nacznik()). M.Odwrotnosc(); void Wyswietl(MacierzWJ &M) void ZwiekszSkale(MacierzWJ &M) Modul: Manipulator MacierzWJ Przegub[5]; PolozeniePodstawy Stan TransX Eksport: void ObrocPrzegub(int, float) void PrzesunPodstawe_X(float Tx) if (M0.TranslacjaX()). void Transformuj(MacierzWJ &M) if (M.nacznik()). M =!M; void OtworzChwytak() class MacierzWJ float _Tab[4][4]; bool Odwrotnosc(); float nacznik(); foat TranslacjaX(); foat TranslacjaY(); foat TranslacjaZ(); MacierzWJ operator!(); MacierzWJ operator *(MacierzWJ); void SkalujRamie(MacierzWJ &M) 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. Style programowania - krótki przeglad 12

Abstrakcja typów danych 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++ Style programowania - krótki przeglad 13

Abstrakcja typów danych 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. Style programowania - krótki przeglad 14

Programowanie obiektowe Modul Glowny suma MacierzPodstawy ID_MacEfektora ID_Przegub1 wynik int main() M1 MacierzWJ M1; nacznik float nacznik; M1 =!M1; void Transformuj(MacierzWJ &M) if (M.nacznik()). M.Odwrotnosc(); void Wyswietl(MacierzWJ &M) Modul: Manipulator MacierzWJ Przegub[5]; PolozeniePodstawy Stan TransX Eksport: void ObrocPrzegub(int, float) void PrzesunPodstawe_X(float Tx) if (M0.TranslacjaX()). class MacierzWJ class Macierz4x4 float _Tab[4][4]; bool Odwrotnosc(); float nacznik(); foat TranslacjaX(); class Macierz4x4 float _Tab[4][4]; bool Odwrotnosc(); float nacznik(); void ZwiekszSkale(MacierzWJ &M) void Transformuj(MacierzWJ &M) if (M.nacznik()). M =!M; foat TranslacjaY(); foat TranslacjaZ(); void OtworzChwytak() void SkalujRamie(MacierzWJ &M) MacierzWJ operator!(); MacierzWJ operator *(MacierzWJ); Podejście oparte na podejściu obiektowym umożliwia budowanie nowych typów danych na bazie wcześniej zdefiniowanych struktur. Style programowania - krótki przeglad 15

Programowanie obiektowe 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 Style programowania - krótki przeglad 16

Programowanie obiektowe 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. Style programowania - krótki przeglad 17

Programowanie obiektowe 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? Style programowania - krótki przeglad 18

Programowanie uogólnione 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)); Style programowania - krótki przeglad 19

Programowanie uogólnione Modul Glowny suma MacierzPodstawy ID_MacEfektora ID_Przegub1 wynik M1 nacznik int main() FMacierzWJ M1; float nacznik; M1 =!M1; void Transformuj(FMacierzWJ &M) if (M.nacznik()). M.Odwrotnosc(); void Wyswietl(FMacierzWJ &M) void ZwiekszSkale(MacierzWJ &M) Modul: Manipulator FMacierzWJ Przegub[5]; PolozeniePodstawy Stan TransX Eksport: void ObrocPrzegub(int, float) void PrzesunPodstawe_X(float Tx) if (M0.TranslacjaX()). void Transformuj(FMacierzWJ &M) if (M.nacznik()). M =!M; void OtworzChwytak() template <class TYP> class MacierzWJ class Macierz4x4<TYP> TYP _Tab[4][4]; bool Odwrotnosc(); TYP nacznik(); TYP TranslacjaX(); TYP TranslacjaY(); TYP TranslacjaZ(); MacierzWJ<TYP> operator!(); template <class TYP> class Macierz4x4 TYP _Tab[4][4]; TYP Odwrotnosc(); TYP nacznik(); void SkalujRamie(FMacierzWJ &M) MacierzWJ<TYP> operator *(MacierzWJ<TYP>); 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. Style programowania - krótki przeglad 20

Programowanie uogólnione Modul Glowny suma MacierzPodstawy ID_MacEfektora ID_Przegub1 wynik M1 nacznik int main() FMacierzWJ M1; float nacznik; M1 =!M1; void Transformuj(FMacierzWJ &M) if (M.nacznik()). M.Odwrotnosc(); void Wyswietl(FMacierzWJ &M) void ZwiekszSkale(MacierzWJ &M) Modul: Manipulator FMacierzWJ Przegub[5]; PolozeniePodstawy Stan TransX typedef Macierz4x4<float> FMacierz4x4; typedef MacierzWJ<float> FMacierzWJ; Eksport: void ObrocPrzegub(int, float) void PrzesunPodstawe_X(float Tx) if (M0.TranslacjaX()). void Transformuj(FMacierzWJ &M) if (M.nacznik()). M =!M; void OtworzChwytak() template <class TYP> class MacierzWJ class Macierz4x4<TYP> TYP _Tab[4][4]; bool Odwrotnosc(); TYP nacznik(); TYP TranslacjaX(); TYP TranslacjaY(); TYP TranslacjaZ(); MacierzWJ<TYP> operator!(); template <class TYP> class Macierz4x4 TYP _Tab[4][4]; TYP Odwrotnosc(); TYP nacznik(); void SkalujRamie(FMacierzWJ &M) MacierzWJ<TYP> operator *(MacierzWJ<TYP>); 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. Style programowania - krótki przeglad 21

Programowanie uogólnione 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++. Style programowania - krótki przeglad 22