OOPSmalltalk - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 9 ( ) Szablony.
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Programowanie obiektowe
Związki w UML.
Standardowa biblioteka języka C++
Programowanie obiektowe
Wzorce.
Generics w .NET 2.0 Łukasz Rzeszot.
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
PROGRAMOWANIE STRUKTURALNE
Kamil Łącki Dominik Strzelichowski
OBJECT PASCAL Marzena Szałas.
Szablony (wzorce) Przykład 1: Szablon klasy -
OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Komunikaty do self Odbiorcą jest obiekt, w którym wykonuje się ten komunikat Szukanie metody.
OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Komunikaty do self Odbiorcą jest obiekt, w którym wykonuje się ten komunikat Szukanie metody.
OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Stałe liczby (Integer, Float, Fraction) e-3 4/7 znaki (Character) $a$$$#$. napisy.
Przykład - Debugger Język pewnego procesora zawiera następujące instrukcje: MOV l, r l:=r ADD l, r l := l + r SUB l, r l := l - r JMP instr skok.
Licznik template<class Count_Type> class Count { public:
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Obiektowe metody projektowania systemów Command Pattern.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
INFORMATYKA Wykładowca: mgr Tadeusz Ziębakowski p. 126 I piętro (naprzeciw dziekanatu)
Typy standardowe Typ Boolean Typ Integer Typ Float Typ Character Operacje wejścia-wyjścia.
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Wykład 8 Wojciech Pieprzyca
Programowanie obiektowe. Obiekty. Metody. Właściwości.
Wykład 2 struktura programu elementy języka typy zmienne
Analiza kosztu zamortyzowanego
Podprogramy.
Podstawy C# Grupa .NET PO.
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Podstawy programowania
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Programowanie obiektowe III rok EiT
Programowanie obiektowe – zastosowanie języka Java SE
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
JAVA.
Jerzy Kotowski Politechnika Wrocławska
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.
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
Kurs języka C++ – wykład 3 ( )
Kurs języka C++ – wykład 9 ( )
Programowanie w języku C++
Projektowanie stron WWW
J A V A S C R I P T Obiekty Opracowała: Anna Śmigielska.
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
Obiekty DOM.
OOPSmalltalk - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie.
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
Programowanie Zaawansowane
Partnerstwo dla Przyszłości 1 Lekcja 27 Klasy i obiekty.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Smalltalk architektura Model-View-Controller obiektowo zorientowany graficzny interfejs użytkownika Cezary BOŁDAK.
Typy wyliczeniowe, kolekcje
Kurs języka C++ – wykład 3 ( )
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
(według:
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
Object vs. class (rozdzial 13 The NEURON book)
Zapis prezentacji:

OOPSmalltalk - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie (przeplecione z analizą, często zależne od konkretnego języka) –programowanie LICZNIK Ma liczyć cokolwiek. Musi umieć zwiększać się, zmniejszać i zerować. ANALIZA Co wie (zna): wartość (value) zero (resetValue) Co umie: zwiększać się(increment) zmniejszać się(decrement) zerować się(reset)

OOPSmalltalk - Licznik, metodologia2 Count value resetValue increment decrement reset nazwa klasy atrybuty obiektów akcje (metody) Licznik heksadecymalny. Pierwsza myśl: specjalizacja licznika. Metodologia Czym różnią się te obiekty, jeśli chodzi o wiedzę (co wiedzą i znają) - te różnice prowadzą do generalizacji - specjalizacji. Czym różnią się, jeśli chodzi o to, co robią - to też prowadzi do generalizacji-specjalizacji. Różnice w prezentowaniu (przedstawieniu) wartości - tu jest tylko różnica w prezentowaniu wartości, specjalizacja nie jest potrzebna. WYNIK ANALIZY

OOPSmalltalk - Licznik, metodologia3 Konkluzja: specjalizacja nie jest potrzebna. Count value resetValue increment decrement reset asBase Ale asBase dotyczy tylko liczników liczbowych. Ostateczny projekt: Count value resetValue increment decrement reset IntegerCount increment decrement asBase specjalizacja asBase - zamienia wartośc na napis (string) reprezentacji liczby przy konkretnej podstawie.

OOPSmalltalk - Licznik, metodologia4 Obiekt atrybuty metody (akcje) Przykłady:3 ala ma kota licznik Klasa - wzorzec dla obiektów Klasa też jest obiektem Przykłady: Integer String Count Nowy obiekt powstaje przez wysłanie komunikatu new do klasy, lub jest literałem (3, ala ma kota) IntegerCount new Obiekt odbiera komunikaty i reaguje na nie wykonując akcje zdefiniowane w odpowiednich metodach licznik increment SMALLTALK

OOPSmalltalk - Licznik, metodologia5 Metoda: funkcja opisująca akcje obiektu metoda zeroargumentowa: nazwa treść treść - zmienne tymczasowe i ciąg wyrażeń oddzielonych kropkami metoda jednoargumentowa znak_specjalny argument treść metoda wieloargumentowa nazwa1: argument1 nazwa2: argument2... treść wyrażenie = komunikat odbiorca nazwa_komunikatu_z_argumentami np. x + 3 x wypisz: ekran Count new kolekcja add: x after: y wyrażenie zwracające wynik z metody: ^wyrażenie

OOPSmalltalk - Licznik, metodologia6 Komunikaty unarne (zero parametrów) odbiorca nazwa_komunikatu licznik reset 3 negated abcde size 5 factorial binarne (1 parametr) odbiorca znak_specjalny parametr x == 2 1 = abc, de złożone (keyword, wiele parametrów) odbiorca nazwa1: par1 nazwa2: par2... tab at: 1 put: 3 licznik asBase: 8 kaskada (wysłanie wielu komunikatów do tego samego odbiorcy) tab at: 1 put: ala; at: 2 put: ma; at: 3 put: asa

OOPSmalltalk - Licznik, metodologia7 Object subclass: #Count instanceVariableNames: 'value resetValue ' classVariableNames: '' poolDictionaries: '' Count methodsFor: 'initialize-release' initialize self reset Count methodsFor: 'accessing' resetValue ^resetValue resetValue: aValue resetValue := aValue. value ^value value: aValue value := aValue. Count methodsFor: 'counting' decrement " Musi być zaimplementowane w podklasie" increment " Musi być zaimplementowane w podklasie" reset value := resetValue Count class methodsFor: 'instance-creation' new ^super new initialize

OOPSmalltalk - Licznik, metodologia8 Count subclass: #IntegerCount instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' IntegerCount methodsFor: 'initialize-release' initialize resetValue := 0. super initialize IntegerCount methodsFor: 'counting' decrement value := value - 1 increment value := value + 1 IntegerCount methodsFor: 'converting' asBase: aBase ^value radix: aBase

OOPSmalltalk - Licznik, metodologia9 Charakterystyczne cechy Smalltalku wszystko jest obiektem (chyba, że jest metodą) także klasy są obiektami program = biblioteka klas + obiekty zadeklarowanie nowej klasy oznacza dodanie jej do biblioteki klas - nie ma rozróżnienia pomiędzy klasami standardowymi a klasami użytkownika, wszystko można modyfikować brak typów zmiennych wartością zmiennej może być dowolny obiekt. Nie ma żadnej kontroli w czasie kompilacji. Jeśli obiekt nie rozumie komunikatu, jest błąd w czasie wykonania programu

OOPSmalltalk - Licznik, metodologia10 Składnia Smalltalku Deklaracja klasy: NazwaNadklasy subclass: #NazwaKlasy instanceVariableNames: zmienna1 zmienna2... classVariableNames: Zmienna1 Zmienna2... poolDictionaries: Pool1 Pool2... category: Kategoria Zmienne indywidualne (instancyjne) atrybuty obiektów, w każdym obiekcie mogą mieć inne wartości Zmienne klasowe atrybuty wspólne dla wszystkich obiektów danej klasy pule (słowniki) pule zmiennych globalnych, wspólne dla obiektów klas, w których są wymienione zmienne globalne (słownik Smalltalk) wspólne dla wszystkich obiektów Nie ma innych zmiennych globalnych

OOPSmalltalk - Licznik, metodologia11 Rodzaje metod: klasowe wykonywane są w klasie, mogą działać na zmiennych globalnych i na zmiennych klasowych kategorie inicjalizacja zmiennych klasowych tworzenie nowych obiektów indywidualne (instancyjne) wykonywane w obiektach, mogą działać na zmiennych indywidualnych, klasowych i globalnych kategorie dostęp do atrybutów porównywanie obiektów kopiowanie wyświetlanie inicjalizacja obiektu pomocnicze (prywatne )...

OOPSmalltalk - Licznik, metodologia12 Licznik dla znaków ASCII (od 33 do 126) Count value resetValue increment decrement reset IntegerCount increment decrement asBase AsciiCount increment decrement

OOPSmalltalk - Licznik, metodologia13 Count subclass: #ASCIICount instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' ASCIICount methodsFor: 'initialize-release' initialize resetValue := $a. super initialize ASCIICount methodsFor: 'counting' decrement | newAsciiValue | newAsciiValue := value asInteger < 33 ifTrue: [126] ifFalse: [value asInteger - 1]. ^self value: (Character value: newAsciiValue) increment | newAsciiValue | newAsciiValue := value asInteger > 125 ifTrue: [33] ifFalse: [value asInteger + 1]. ^self value: (Character value: newAsciiValue)

OOPSmalltalk - Licznik, metodologia14 LISTA Object subclass: #List instanceVariableNames: 'next elem' metody indywidualne next ^next next: aList next := aList elem ^elem elem: anElement elem := anElement WYGODNIEJ metody klasowe dla List createWith: element and: aList ^(self new) elem: element; next: aList przedefiniowana metoda push push top := Lista createWith: element and: top

OOPSmalltalk - Licznik, metodologia15 STOS Operacje: push: elementzwraca stos popzwraca zdjęty element topElemzwraca element z czubka isEmptyzwraca true lub false newtworzy pusty stos Object subclass: #Stack instanceVariableNames: 'top' classVariableNames: '' poolDictionaries: '' metody indywidualne push: element | aux | (aux := Lista new) elem: element ; next: top. top := aux pop | aux | self isEmpty ifTrue: [^self error: pusty stos]. aux := top. top := top next. ^aux elem isEmpty ^(top isNil) topElem ^top elem

OOPSmalltalk - Licznik, metodologia16 Stos elementów tego samego typu Stack subclass: #MonotypeStack instanceVariableNames: 'typeOfElems' classVariableNames: '' poolDictionaries: '' metody klasowe new: type ^(super new) typeOfElems: type metody indywidualne typeOfElems ^typeOfElems typeOfElems: type typeOfElems := type. ^self push: element (element class == typeOfElems) ifFalse: [^self error: zły typ elementu] ifTrue: [ ^super push: element ]