OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Stałe liczby (Integer, Float, Fraction) 3 -10.4 128.4e-3 4/7 znaki (Character) $a$$$#$. napisy.

Slides:



Advertisements
Podobne prezentacje
Funkcje w PHP ABK.
Advertisements

Katarzyna Szafrańska kl. II ti
Język C/C++ Funkcje.
Programowanie obiektowe
Wprowadzenie do języka skryptowego PHP – cz. 2
Programowanie w środowisku sieciowym
Języki programowania C++
XPath XSLT – część XPath. XSLT – część 12 XPath – XML Path Language Problem: –jednoznaczne adresowanie fragmentów struktury dokumentu XML.
OBJECT PASCAL Marzena Szałas.
Kolekcje Collection Bag SequenceableCollection ArrayedCollection Array
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 - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie.
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.
ZŁOŻONOŚĆ OBLICZENIOWA
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 5: Typy porządkowe, wyliczeniowe i okrojone. Definiowanie.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 4: Wyrażenia i operatory. Podstawowe instrukcje języka.
Podstawy informatyki Rekurencja i rekurencja Grupa: 1A
Typy standardowe Typ Boolean Typ Integer Typ Float Typ Character Operacje wejścia-wyjścia.
Wykład 2 struktura programu elementy języka typy zmienne
Instrukcja skoku GO TO etykieta Np. GO TO 100 ….. 100WRITE (*,*) Przeskok do instrukcji 100 Uwaga! NIE WOLNO skakać do wnętrzna złożonych instrukcji warunkowych.
LICZBY RZECZYWISTE PODZBIORY ZBIORU LICZB RZECZYWISTYCH
Wprowadzenie do programowania w języku Turbo Pascal
gdzie A dowolne wyrażenie logiczne ; x negacja x Tablice Karnaugha Minimalizacja A x+ A x=A gdzie A dowolne wyrażenie logiczne ;
Semafory.
Podprogramy.
Projektowanie dynamiki - diagramy interakcji
Podstawy C# Grupa .NET PO.
Programowanie strukturalne i obiektowe
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
A ctive S erver P ages Technologia dostępu do danych.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
PL/SQL Zajęcia nr II PL/SQL(2) M. Rakowski - WSISiZ.
Programowanie obiektowe – zastosowanie języka Java SE
STEROWANIE Ale nie tylko
Inicjalizacja i sprzątanie
Systemy wejścia i wyjścia Michał Wrona. Co to jest system wejścia i wyjścia? Pobierania informacji ze źródeł danych, zdolnych przesyłać sekwencje bajtów,
Łódź, 3 października 2013 r. Katedra Analizy Nieliniowej, WMiI UŁ Podstawy Programowania Programy różne w C++
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Podstawy informatyki 2013/2014
Programowanie baz danych
Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy
FUNKCJE Opracował: Karol Kara.
Kurs języka C++ – wykład 9 ( )
J A V A S C R I P T Obiekty Opracowała: Anna Śmigielska.
Zmienne i typy danych w C#
Temat 3: Okno dialogowe.
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Obiekty DOM.
OOPSmalltalk - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie.
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Dominik Benduski Michał Mandecki Podstawy Visual Basic w Excelu.
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Podstawowe konstrukcje języka Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin.
Czym jest PHP? ● Językiem programowania przeznaczonym do tworzenia i generowania dynamicznych stron WWW. Działa po stronie serwera: Klient Żądanie strony.
Liczbami naturalnymi nazywamy liczby 0,1,2,3,..., 127,... Liczby naturalne poznaliśmy już wcześniej; służą one do liczenia przedmiotów. Zbiór liczb.
Lua - wprowadzenie ● lua.org – źródła, dokumentacja, podręcznik itp ● Interpreter - Lua.org->Downloads->Binaries->get a binary-> Windows->Wersja >Executables->
PHP (wstęp) Personal Home Page Tools (PHP Tools)
Programowanie Obiektowe – Wykład 6
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
(według:
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Instrukcje wyboru.
Dane, zmienne, instrukcje
Zapis prezentacji:

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Stałe liczby (Integer, Float, Fraction) e-3 4/7 znaki (Character) $a$$$#$. napisy (String) Ala ma kotaAdams symbole (Symbol) #Licznik#symbol#+ #value: tablice #(5 3 $a def)

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące2 Podstawowe klasy Object Boolean False True Collection IndexedCollection FixedSizeCollection Array String Symbol Magnitude Character Date Number Float Fraction Integer Time UndefinedObject true - jedymy obiekt klasy True false - jedyny obiekt klasy False odpowiadają na komunikaty: & and:or:| ifFalse: ifTrue:ifTrue:ifFalse:ifFalse:ifTrue nil - jedyny obiekt klasy UndefinedObject

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące3 Magnitude Na obiektach tej klasy jest określony porządek liniowy >= Uwaga: =, ==, ~=, ~ (czyli równości i różności) są odziedziczone z klasy Object. Number Na obiektach tej klasy sa określone operacje arytmetyczne. +-*/ // aNumberiloraz całkowity odbiorcy przez aNumber \\ aNumberreszta całkowita abswartość bezwzględna odbiorcy negatednegacja odbiorcy sinsinus odbiorcy cosCosinus odbiorcy Float Liczby rzeczywiste reprezentowane zmiennopozycyjnie. Fraction Ułamki nieupraszczalne Integer Klasa liczb całkowitych. Ma podklasy: SmallInteger - liczby reprezentowane w słowie maszyny LargeNegativeInteger - liczby ujemne dowolnej precyzji LargePositiveInteger - liczby dodatnie dowolnej precyzji factorialzwraca silnię odbiorcy gcd: anIntegerzwraca najwiekszy wspólny dzielnik lcm: anIntegerzwraca najmniejszą wspólną wielokrotność

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące4 Komunikaty do self Odbiorcą jest obiekt, w którym wykonuje się ten komunikat Szukanie metody rozpoczyna się od klasy obiektu, w którym wykonuje sie ten komunikat (a nie od klasy, w której występuje tekstowo ten komunikat). Jest to wiązanie dynamiczne, a nie statyczne. Object subclass: #One Metody instancyjne test ^1 result1 ^ self test One sublcass: #Two Metody instancyjne test ^2 x1 := One new. x2 := Two new. x1 test1 x1 result11 x2 test2 x2 result12

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące5 Komunikaty do super Odbiorcą jest obiekt wyznaczony przez self. szukanie metody rozpoczyna się od nadklasy, w której występuje tekstowo ten komunikat. Jest to wiązanie statyczne, a nie dynamiczne. Two subclass: #Three.... metody instancyjne result2 ^self result1 result3 ^super test Three subclass: #Four metody instancyjne test ^4 x3 := Three new. x4 := Four new. x4 result14 x3 result22 x4 result24 x3 result32 x4 result32 x4 result14

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące6 Bloki Bloki są obiektami klasy Context. Bloki to anonimowe funkcje (czyli kawałki kodu) [ :par1 :par2:... | S1. S2.... Sk ] Bloki nie są wykonywane od razu po napotkaniu w tekście metody.Tworzony jest wtedy obiekt klasy Context. Można wykonać treść bloku wysyłając do utworzonego tak obiektu komunikat value. Komunikat value zwraca wartość ostatniego wyrażenia wykonanego w bloku. aBlock value: wyr1 value: wyr2 [ i := i + 1] value [:x :y | (x + y * 3 ] value: 2 value: 5 blk := [ : par | total := total + par ] total := 0. blk value: 10. blk value: 1. blk value: 3.total = 14 Blok można przekazać jako parametr komunikatu. x wykonaj: [ ]wykonaj: aBlock aBlock value

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące7 Powrót z bloku - ^ Wystąpienie ^Expr w bloku jest powrotem z metody, w której blok wystepuje (tekstowo !), a więc kończy wykonanie tej metody (a nie metody, która wywołała ten blok). Przykłady: isPrime | candidate divisor | candidate := self. candidate <= 0 ifTrue: [^false]. candidate >= 1 & (candidate <= 3) ifTrue: [^true]. (candidate \\ 2) = 0 ifTrue: [^false]. divisor := 3. [ divisor * divisor <= candidate ] whileTrue: [ (candidate \\ divisor) = 0 ifTrue: [^false] ifFalse: [divisor := divisor + 2] ] ^true Użycie bloków do obsługi sytuacji wyjątkowych: set := Set new. set add: 3; add: 5; add: 7; add: set remove: 3 ifAbsent: [ Transcript show: nie ma obiektu. ^self] set remove: 10 ifAbsent: [ Transcript show: nie ma obiektu. ^self]

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące8 Instrukcje warunkowe wyrWarunkowe ifTrue: [ blok1 ] wyrWarunkowe ifFalse: [blok1] wyrWarunkowe ifFalse: [blok1] ifTrue: [blok2] wyrWarunkowe ifTrue: [blok1] ifFalse: [blok2] Wyrażenie warunkowe musi być obiektem klasy True lub False. x < 3 ifTrue: [ x := 0]. liczba1 < liczba2 ifTrue: [ max := liczba2. min := liczba1] ifFalse: [max := liczba1. min := liczba2] Treść metod warunkowych W klasie True: ifFalse: aBlock ^nil ifTrue: aBlock ^ aBlock value ifTrue: trueBlock ifFalse: falseBlock ^ trueBlock value ifFalse: falseBlock ifTrue: trueBlock ^ trueBlock value

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące9 Pętle [ blok warunkowy ] whileTrue: [ blok pętli ] [ blok warunkowy ] whileFalse: [ blok pętli ] Blok warunkowy powinien być blokiem bezparametrowym takim, że wysłany do niego komunikat value zwraca true lub false. Komunikaty whileTrue: i whileFalse: są rozumiane przez bloki. suma := 0. liczba := 4. [ liczba <= 100 ] whileTrue: [ suma := suma + liczba. liczba := liczba + 1] napis := abcdef345. i := 1. [ (napis at: i) putOn: Terminal. (napis at: i ) ~~$3 ] whileTrue: [ i := i + 1] Treść metody whileTrue: w klasie Context whileTrue: aBlock self value ifTrue: [ aBlock value. self whileTrue: aBlock ] ^ nil

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące10 liczba timesRepeat: [ blok ] suma := 0. i := 0. 5 timesRepeat: [ i := i + 1. suma := suma + i ] timesRepeat: aBlock | anInteger | anInteger := self. [ anInteger > 0 ] whileTrue: [ anInteger := anInteger - 1. aBlock value ] Pętle liczbowe Odpowiednie metody są zdefiniowane w klasie Number lub Integer. liczba to: final by: step do: aBlock liczba to: final do: aBlock 1 to: 10 by: 2 do: [ :i | tab at: i put: 0 ] zeruje co drugi element tablicy tab to: final by: step do: aBlock | index | index := self. step > 0 ifTrue: [ [ index <= final ] whileTrue: [ aBlock value: index. index := index + step] ] ifFalse:......

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące11 Klasa Object Najważniejsze metody: =porównanie obiektów. Zwykle przedefiniowane w podklasach (czy obiekty są takie same) = =porównanie obiektów (czy to jest ten sam obiekt) ~ =, ~~różność obiektów classzwraca klasę obiektu isKindOf: aClassczy to jest obiekt tej klasy lub jej podklasy isMemberOf: aClassczy to jest obiekt tej klasy copykopia obiektu (tzw. powierzchowna) shallowCopyj. w. deepCopykopia głęboka, z powierzchowną kopią atrybutów implementedBySubclasssygnalizacja (dla klasy abstrakcyjnej), że ta metoda nie może tu być zaimplementowana inspectwłącza okno oglądania obiektu isNil, notNilczy obiekt jest równy nil (nie jest) perform: aSymbolwysyła komunikat bezparametrowy aSymbol do odbiorcy komunikatu perform:. Wynikiem jest wynik wysłanego komunikatu perform: aSymbol with: anObjectj.w., anObject jest parametrem komunikatu aSymbol perform: aSymbol withArguments: anArray j.w., anArray jest tablicą parametrów komunikatu aSymbol

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące12 metody klasy Object - c.d. error: aString wypisuje odpowiedni komunikat o błędzie i zatrzymuje program haltzatrzymuje program printOn: aStream wypisuje na strumień aStream tekstową reprezentację obiektu. Standardowo pisze tylko informację o klasie obiektu, powinna być przedefiniowana w poszczególnych klasach (np. Number, String, Date ) printStringzwraca napis będący tektową reprezentacją obiektu; powinna być przedefiniowana w podklasach yourselfzwraca obiekt odbiorcy doesNotUnderstand: aMessage generuje komunikat o błędzie - niezrozumiały komunikat aMessage

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące13 Klasy i metaklasy Object Behavior Class Metaclass Klasa Class reprezentuje wszystkie klasy. Metaklasy są to klasy klas. Tworzą dokładnie taką samą hierarchię, jak klasy. Każdej klasie (np. Number, Object) odpowiada metaklasa o tej samej nazwie (odp. Number, Object). Klasa jest jedynym obiektem swojej metaklasy. Każda metaklasa jest obiektem klasy Metaclass. Klasa Metaclass jest swoim własnym obiektem. Zmienne indywidualne i metody indywidualne metaklasy (zaimplementowane w klasie Class jako instancyjne) są zmiennymi klasowymi i metodami klasowymi każdego obiektu (czyli jakby klasy Object). Klasy Behavior i Class definiują protokoły wspólne dla wszystkich klas. W klasie Behavior: newtworzy nowy obiekt new: sizetworzy nowy obiekt ze zmiennymi indeksowanymi namezwraca nazwę odbiorcy (czyli nazwę klasy) w klasie Class: subclass: aSymbol instanceVariableNames: string1 classVariableNames: string2 poolDictionaries: pool tworzenie nowej klasy, czyli nowego obiektu odp. metaklasy

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące14 Obiekty ze zmiennymi indeksowanymi 1. Zwykła klasa - obiekty mają tylko zwykłe (nazwane) zmienne indywidualne. Number subclass: Fraction instanceVariableNames: numerator denominator classVariableNames: poolDictionaries: category: Numeric 2. Klasa, której obiekty, oprócz nazwanych zmiennych indywidualnych, mają zmienne indeksowane. Ich liczba jest określona w momencie tworzenia obiektu (new: size). FixedSizeCollection variableSubclass: Array instanceVariableNames: classVariableNames: poolDictionaries: category: Array Objet variableSubclass: Stack instanceVariableNames: top classVariableNames: Klasa, której obiekty mają wyłącznie indeksowane zmienne indywidualne (bajty). Rozmiar obiektów jest określany przy ich tworzeniu (new: size) FixedSizeCollection variableByteSubclass: String classVariableNames: poolDictionaries: CharacterConstants category: String

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące15 Metody (z klasy Object i Behavior), które są odbierane przez klasy i obiekty ze zmiennymi indeksowanymi: new: aNumbertworzy nowy obiekt, który ma aNumber zmiennych indeksowanych. błąd, jeśli klasa nie ma zmiennych indeksowanych. tab := Array new: 10 at: anIntegerzwraca obiekt, który znajduje się na pozycji anInteger w odbiorcy. Błąd, jeśli obiekt nie ma zmiennych indeksowanych lub anInteger przekracza ich liczbę. y := tab at: 3 at: anInteger put: anObjectwstawia obiekt anObject na pozycję anInteger odbiorcy. Błąd j.w. tab at: 2 put: test. tab at: 3 put: 0 basicAt: anIntegerjak at:, nie jest przedefiniowane w podklasach basicAt: anInt put: anObjak at: put:, nie jest przedefioniowane w podklasach sizezwraca liczbę indeksowanych zmiennych tab size = 10 true basicSizejak size, nie jest przedefiniowane w podklasach

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące16 Przykład - MonitoredArray Chcemy zdefiniować nową klasę pozwalającą na badanie częstości dostępu do elementów tablicy. Klasa MonitoredArray będzie podklasą klasy Array. Musimy przedefiniować metodę at: tak, aby zliczała dostęp do elementów tablicy. Klasa MonitoredArray może zastąpić klasę Array w każdej aplikacji. Array subclass: #MonitoredArray instanceVariableNames: liczniki classVariableNames: poolDictionaries: Metody klasowe new: anInteger ^(super new: anInteger) initialize Metody indywidualne initialize Tworzy równoległą tablicę liczniki | size | size := self size. liczniki := Array new: size. 1 to: size do: [ :index | atCounts at: index put: 0 ] at: index liczniki at: index put: ((liczniki at: index) + 1). ^super at: index licznikiDostepu ^liczniki