Wykład 8. Moduły. Zdzisław Spławski Programowanie funkcyjne 1
|
|
- Ksawery Murawski
- 8 lat temu
- Przeglądów:
Transkrypt
1 Wykład 8 Moduły Abstrakcyjne typy danych, moduły i klasy Sygnatury i struktury Anonimowe sygnatury i struktury Wykorzystanie sygnatur do ukrywania reprezentacji Różne widoki modułów Współdzielenie typów w modułach Współdzielenie typów i moduły wewnętrzne Moduły i oddzielna kompilacja Zdzisław Spławski Programowanie funkcyjne 1
2 Abstrakcyjny typ danych Abstrakcyjny typ danych (ang. abstract data type = ADT) składa się z dobrze wyspecyfikowanego zbioru elementów oraz zbioru operacji, które mogą być wykonywane na tym zbiorze elementów. Przykłady ATD: stos, kolejka, graf, a także liczby całkowite, liczby rzeczywiste, wartości logiczne. Specyfikacja ADT nie opisuje wewnętrznej reprezentacji zbioru elementów ani sposobu implementacji operacji, która powinna być ukryta (hermetyzacja, ang. encapsulation). Zdzisław Spławski Programowanie funkcyjne 2
3 Abstrakcyjne typy danych i moduły Podstawę abstrakcyjnych typów danych stanowi rozdzielenie (publicznego) interfejsu i (ukrytej) implementacji. Systemy wspierające stosowanie abstrakcji (w szczególności ADT) powinny posiadać trzy własności: Hermetyzacja (ang. encapsulation) umożliwia ukrycie wnętrza części systemu. Kompozycyjność (ang. compositionality) umożliwia tworzenie nowych elementów systemu przez łączenie istniejących części. Konkretyzacja/wywołanie (ang. instantiation/invocation) umożliwia tworzenie wielu egzemplarzy elementu systemu w oparciu o tę samą definicję. ADT można wygodnie implementować, np. jako moduły lub klasy. Dwa aspekty programowania, związane z modułami: fizyczna dekompozycja programu na pliki, które mogą być oddzielnie kompilowane i wielokrotnie używane; logiczna dekompozycja programu, ułatwiająca projektowanie i zrozumienie programu (wyższy poziom abstrakcji). W języku OCaml można programować używając modułów i klas, co pozwala na porównanie tych mechanizmów i związanych z nimi technik programowania. Zdzisław Spławski Programowanie funkcyjne 3
4 Cele definiowania ATD Abstrakcja Bezpieczeństwo Modyfikowalność Przydatność do wielokrotnego użycia Zdzisław Spławski Programowanie funkcyjne 4
5 Algebra abstrakcyjna (uniwersalna) Algebrą abstrakcyjną nazywamy zbiór elementów S (nośnik algebry), na którym są zdefiniowane pewne operacje, posiadające własności zadane przez aksjomaty. Zdzisław Spławski Programowanie funkcyjne 5
6 Przykłady algebr abstrakcyjnych (homogenicznych) Półgrupa S, : S S S a (b c)=(a b) c (łączność) Monoid S,, 1 jest półgrupą z obustronną jednością (elementem neutralnym) 1:S a 1=a 1 a=a Grupa S,,, 1 jest monoidem, w którym każdy element posiada element odwrotny względem binarnej operacji monoidu : S S a a=1 a a=1 Zdzisław Spławski Programowanie funkcyjne 6
7 Algebraiczna specyfikacja stosu (heterogeniczna) Sygnatura: empty : -> Stack push : Elem * Stack -> Stack top : Stack -> Elem pop : Stack -> Stack isempty : Stack -> bool Aksjomaty równościowe: s:stack, e: Elem isempty (push (e,s)) = false isempty (empty) = true pop (push(e,s)) = s pop (empty) = empty top (push(e,s)) = e top (empty) = ERROR Zdzisław Spławski Programowanie funkcyjne 7
8 Stos jako typ konkretny Stos można zaimplementować w języku OCaml jako typ konkretny, przepisując prawie dosłownie powyższą specyfikację algebraiczną. # type 'a stack = EmptyStack Push of 'a * 'a stack;; type 'a stack = EmptyStack Push of 'a * 'a stack # let isempty = function EmptyStack -> true Push _ -> false;; val isempty : 'a stack -> bool = <fun> # let pop = function Push(_,s) -> s EmptyStack -> EmptyStack;; val pop : 'a stack -> 'a stack = <fun> # let top = function Push(e,_) -> e EmptyStack -> failwith "top: EmptyStack";; val top : 'a stack -> 'a = <fun> # let s = Push(3,Push(2,Push(1,EmptyStack)));; val s : int stack = Push (3, Push (2, Push (1, EmptyStack))) Ta implementacja w sposób oczywisty spełnia specyfikację algebraiczną, ale udostępnia klientom reprezentację wewnętrzną stosu i stanowi zbiór nie związanych funkcji, znajdujących się w globalnej przestrzeni nazw. Zdzisław Spławski Programowanie funkcyjne 8
9 Programowanie małoskalowe i wielkoskalowe - analogie typ ~ sygnatura ( typ modułu, interfejs ) wartość ~ struktura ( moduł, implementacja ) funkcja ~ funktor Zdzisław Spławski Programowanie funkcyjne 9
10 Specyfikacja składowych wartości sygnatury: val nazwa : typ Składnia Deklaracja sygnatury (interfejsu): module type NAZWA = sig składowe sygnatury Deklaracja struktury (modułu): Nazwa modułu musi się zaczynać z dużej litery. Nazwa sygnatury jest dowolna, ale w OCamlu na mocy konwencji używane są wyłącznie duże litery. module Nazwa = struct definicje typów i wartości Zdzisław Spławski Programowanie funkcyjne 10
11 Sygnatury i struktury mogą być anonimowe. Składnia sig składowe sygnatury struct definicje typów i wartości Kompilator sam tworzy domyślną sygnaturę struktury, umieszczając w niej definicje typów i typy wartości. Można jednak sprecyzować sygnaturę używając dowolnej z poniższych notacji: module Nazwa : sygnatura = struktura lub module Nazwa = ( struktura : sygnatura ) Dostęp do typów i wartości zdefiniowanych w module można uzyskać używając notacji kropkowej: Nazwa1.nazwa2 Można też moduł otworzyć: open Nazwa Grozi to jednak przesłonięciem własnych identyfikatorów. Zdzisław Spławski Programowanie funkcyjne 11
12 # module type STACK_FUN = sig type 'a t exception Empty of string val create: 'a t val push: 'a * 'a t -> 'a t val top: 'a t -> 'a val pop: 'a t -> 'a t val isempty: 'a t -> bool ;; module type STACK_FUN = sig type 'a t exception Empty of string val create : 'a t val push : 'a * 'a t -> 'a t val top : 'a t -> 'a val pop : 'a t -> 'a t val isempty : 'a t -> bool Sygnatura stosu funkcyjnego Zdzisław Spławski Programowanie funkcyjne 12
13 Implementacja stosu funkcyjnego # module Stack : STACK_FUN = struct type 'a t = EmptyStack Push of 'a * 'a t exception Empty of string let create = EmptyStack let push(e,s) = Push(e,s) let top = function Push(e,_) -> e EmptyStack -> raise (Empty "module StackFun: top") let pop = function Push(_,s) -> s EmptyStack -> EmptyStack let isempty = function EmptyStack -> true Push _ -> false ;; module Stack : STACK_FUN Zdzisław Spławski Programowanie funkcyjne 13
14 Wykorzystanie modułu # let s = Stack.push(2,Stack.push(1,Stack.create));; val s : int Stack.t = <abstr> # Stack.top s;; - : int = 2 # Stack.top (Stack.pop(Stack.pop s));; Exception: Stack.Empty "module StackFun: top". Użycie modułu umożliwiło ukrycie reprezentacji wewnętrznej stosu i sposobu implementacji operacji (hermetyzacja). Identyfikatory, użyte w module są lokalne. Zdzisław Spławski Programowanie funkcyjne 14
15 Dwa widoki ATD (na przykładzie stosu) ATD Stack push... let create = EmptyStack.... Widok programisty (widoczne są detale implementacji) pop Widok klienta (widoczne są tylko operacje) Zdzisław Spławski Programowanie funkcyjne 15
16 Moduł bez sygnatury Reprezentację wewnętrzną można ujawnić, jeśli nie podamy sygnatury modułu. # module Stack' = struct type 'a t = EmptyStack Push of 'a * 'a t exception Empty of string let create = EmptyStack let push(e,s) = Push(e,s) let top = function Push(e,_) -> e EmptyStack -> raise (Empty "module Stack': top") let pop = function Push(_,s) -> s EmptyStack -> EmptyStack let isempty = function EmptyStack -> true Push _ -> false ;; module Stack' : sig type 'a t = EmptyStack Push of 'a * 'a t exception Empty of string val create : 'a t val push : 'a * 'a t -> 'a t val top : 'a t -> 'a val pop : 'a t -> 'a t val isempty : 'a t -> bool # let s = Stack'.push(2,Stack'.push(1,Stack'.create));; vals : intstack'.t= Stack'.Push(2, Stack'.Push (1, Stack'.EmptyStack)) Zdzisław Spławski Programowanie funkcyjne 16
17 Sygnatura stosu modyfikowalnego # module type STACK_MUT = sig type 'a t exception Empty of string val create: unit -> 'a t val push: 'a * 'a t -> unit val top: 'a t -> 'a val pop: 'a t -> unit val isempty: 'a t -> bool ;; module type STACK_MUT = sig type 'a t exception Empty of string val create : unit -> 'a t val push : 'a * 'a t -> unit val top : 'a t -> 'a val pop : 'a t -> unit val isempty : 'a t -> bool Zdzisław Spławski Programowanie funkcyjne 17
18 Implementacja stosu modyfikowalnego na liście # module StackMutList = struct type 'a t = { mutable l : 'a list } exception Empty of string let create() = { l = [] } let push(e,s) = s.l <- e :: s.l let top s = match s.l with hd::_ -> hd [] -> raise (Empty "module StackMutList: top") let pop s = match s.l with hd::tl -> s.l <- tl [] -> () let isempty s = s.l = [] ;; Zdzisław Spławski Programowanie funkcyjne 18
19 Stos modyfikowalny na liście - odpowiedź systemu module StackMutList : sig type 'a t = { mutable l : 'a list; } exception Empty of string val create() : unit -> '_a t val push : 'a * 'a t -> unit val top : 'a t -> 'a val pop : 'a t -> unit val isempty : 'a t -> bool # let s = StackMutList.create();; val s : '_a StackMutList.t = {StackMutList.l = []} # StackMutList.push(1,s);; - : unit = () # StackMutList.push(2,s);; - : unit = () # StackMutList.top s;; - : int = 2 # StackMutList.pop s;; - : unit = () # StackMutList.pop s;; - : unit = () # StackMutList.top s;; Exception: StackMutList.Empty "module StackMutList: top". Zdzisław Spławski Programowanie funkcyjne 19
20 Implementacja stosu modyfikowalnego na tablicy # module StackMutAr = struct type 'a t = { mutable n : int; mutable a : 'a option array } exception Empty of string let size = 5 let create() = { n=0 ; a = Array.create size None } let increase s = s.a <- Array.app s.a (Array.create size None) let push(e,s) = begin if s.n = Array.length s.a then increase s; s.a.(s.n) <- Some e ; s.n <- succ s.n let top s = if s.n=0 then raise (Empty "module StackMutAr: top") else match s.a.(s.n-1) with Some e -> e None -> failwith "module StackMutAr: top (implementation error!!!)" let pop s = if s.n=0 then () else s.n <- pred s.n let isempty s = s.n=0 ;; Zdzisław Spławski Programowanie funkcyjne 20
21 Stos modyfikowalny na tablicy odpowiedź systemu module StackMutAr : sig type 'a t = { mutable n : int; mutable a : 'a option array; } exception Empty of string val size : int val create : unit -> 'a t val increase : 'a t -> unit val push : 'a * 'a t -> unit val top : 'a t -> 'a val pop : 'a t -> unit val isempty : 'a t -> bool # let s = StackMutAr.create();; val s : '_a StackMutAr.t = {StackMutAr.n = 0; StackMutAr.a = [ None; None; None; None; None ]} # StackMutAr.push(1,s);; - : unit = () # StackMutAr.top s;; - : int = 1 # StackMutAr.pop s;; - : unit = () # StackMutAr.top s;; Exception: StackMutAr.Empty "module StackMutAr: top". Zdzisław Spławski Programowanie funkcyjne 21
22 Dwa moduły dla stosów (1) Moduły reprezentują typ t z sygnatury w różny sposób. # StackMutList.create();; - : '_a StackMutList.t = {StackMutList.l = []} # StackMutAr.create();; - : '_a StackMutAr.t ={StackMutAr.n = 0; StackMutAr.a = [ None; None; None; None; None ]} Można ukryć reprezentację dla abstrakcyjnego typu danych wykorzystując sygnaturę. # module SML : STACK_MUT = StackMutList;; module SML : STACK_MUT # module SMA : STACK_MUT = StackMutAr;; module SMA : STACK_MUT # let sl = SML.create();; val sl : '_a SML.t = <abstr> # let sa = SMA.create();; val sa : '_a SMA.t = <abstr> Zdzisław Spławski Programowanie funkcyjne 22
23 Oba moduły implementują ten sam interfejs, ale typy reprezentacji są różne. # SMA.isEmpty sl;; Characters 12-14: SMA.isEmpty sl;; ^^ This expression has type 'a SML.t but is here used with type 'b SMA.t Nawet gdyby typy reprezentacji były takie same, to użycie sygnatury spowodowało ukrycie tej reprezentacji. # module SL1 = (StackMutList : STACK_MUT);; module SL1 : STACK_MUT # module SL2 = (StackMutList : STACK_MUT);; module SL2 : STACK_MUT # let s = SL1.create();; val s : '_a SL1.t = <abstr> # SL2.isEmpty s;; Characters 12-13: SL2.isEmpty s;; Przykład: dwa moduły dla stosów (2) ^ This expression has type 'a SL1.t but is here used with type 'b SL2.t Zdzisław Spławski Programowanie funkcyjne 23
24 Różne widoki modułów (1) #module M = ( struct type t = int ref let create() = ref 0 let add x = incr x let get x = if!x>0 then (decr x; 1) else failwith "Empty" : sig type t val create : unit -> t val add : t -> unit val get : t -> int ) ;; module M : sig type t val create : unit -> t val add : t -> unit val get : t -> int Zdzisław Spławski Programowanie funkcyjne 24
25 Różne widoki modułów (2) # module type PRODUCER = sig type t val create : unit -> t val add : t -> unit ;; module type PRODUCER = sig type t val create : unit -> t val add : t -> unit # module type CONSUMER = sig type t val get : t -> int ;; module type CONSUMER = sig type t val get : t -> int # module Producer = (M:PRODUCER) ;; module Producer : PRODUCER # module Consumer = (M:CONSUMER) ;; module Consumer : CONSUMER Niestety, moduły Producer i Consumer nie mogą ze soba współpracować! #let x = Producer.create() in Producer.add x; Consumer.get x;; ^ This expression has type Producer.t but is here used with type Consumer.t Zdzisław Spławski Programowanie funkcyjne 25
26 Współdzielenie typów w modułach W celu utożsamienia typów Producer.t i Consumer.t trzeba użyć poniższej konstrukcji językowej: NAZWA with type t1 = t2 and... # module Producer = (M:PRODUCER with type t = M.t) ;; module Producer : sig type t = M.t val create : unit -> t val add : t -> unit # module Consumer = (M:CONSUMER with type t = M.t) ;; module Consumer : sig type t = M.t val get : t -> int # let x = Producer.create();; val x : Producer.t = <abstr> # Producer.add x; Producer.add x;; - : unit = () # Consumer.get x;; - : int = 1 # Consumer.get x;; - : int = 1 # Consumer.get x;; Exception: Failure "Empty". Zdzisław Spławski Programowanie funkcyjne 26
27 Współdzielenie typów i moduły wewnętrzne (1) # module M1 = ( struct type t = int ref module M_hide = struct let create() = ref 0 let add x = incr x let get x = if!x>0 then (decr x; 1) else failwith"empty" module Producer = M_hide module Consumer = M_hide : sig type t module Producer : sig val create : unit -> t val add : t -> unit module Consumer : sig val get : t -> int ) ;; Zdzisław Spławski Programowanie funkcyjne 27
28 Współdzielenie typów i moduły wewnętrzne (2) module M1 : sig type t module Producer : sig val create : unit -> t val add : t -> unit module Consumer : sig val get : t -> int Można teraz osiągnąć ten sam rezultat, który osiągnęliśmy za pomocą konstrukcji with type, chociaż dostęp do funkcji modułów Producer i Consumer odbywa się za pośrednictwem modułu M: # let x = M1.Producer.create();; val x : M1.t = <abstr> # M1.Producer.add x; - : unit = () # M1.Consumer.get x;; - : int = 1 # M1.Consumer.get x;; Exception: Failure "Empty". Zdzisław Spławski Programowanie funkcyjne 28
29 Moduły i oddzielna kompilacja Notacja wprowadzona dla sygnatur i modułów odnosiła się do programów monolitycznych, które mogą fizycznie być podzielone na pliki, ale są kompilowane jako całość. Jednostka kompilacji K składa się z dwóch plików: pliku z implementacją K.ml, który jest ciągiem definicji znajdujących się w programach monolitycznych między słowami kluczowymi struct... (ale bez tych słów); pliku z interfejsem K.mli (opcjonalnie), który jest ciągiem specyfikacji znajdujących się w programach monolitycznych między słowami kluczowymi sig... (ale bez tych słów). Inna jednostka kompilacji L może się odwoływać do K jak do struktury w programie monolitycznym, używając notacji kropkowej K.x. Przykład (wykonywać w oknie kom). Pliki źródłowe (są w folderze oddzielnie ): stack.mli, stack.ml, teststack.ml. Kroki kompilacji: ocamlc c stack.mli (tworzy plik stack.cmi) ocamlc c stack.ml (tworzy plik stack.cmo) ocamlc c teststack.ml (tworzy plik teststack.cmo) ocamlc o teststack stack.cmo teststack.cmo (łączenie plików obiektowych, kolejność jest istotna!) Uruchamianie powstałego programu (w kodzie pośrednim, ang. bytecode): ocamlrun teststack Możliwa jest też kompilacja do kodu rodzimego (ang. native code), patrz OCaml manual. Zdzisław Spławski Programowanie funkcyjne 29
30 Zadania kontrolne Algebraiczna specyfikacja kolejki nieskończonej empty : -> Queue enqueue : Elem * Queue -> Queue first : Queue -> Elem dequeue : Queue -> Queue isempty : Queue -> bool For all q:queue, e1,e2: Elem isempty (enqueue (e1,q)) = false isempty (empty) = true dequeue (enqueue(e1,enqueue(e2,q))) = enqueue(e1,dequeue(enqueue(e2,q))) dequeue (enqueue(e1,empty)) = empty dequeue (empty) = empty first (enqueue(e1,enqueue(e2,q))) = first(enqueue(e2,q)) first (enqueue(e1,empty)) = e1 first (empty) = ERROR Zdzisław Spławski Programowanie funkcyjne 30
31 Zadania kontrolne 1. Dana jest następująca sygnatura dla kolejek niemodyfikowalnych (czysto funkcyjnych!). module type QUEUE_FUN = sig (* This module implements queues (FIFOs)in a functional way. *) type 'a t (* The type of queues containing elements of type ['a]. *) exception Empty of string (* Raised when [first] is applied to an empty queue. *) val empty: unit -> 'a t (* [empty()] returns a new queue, initially empty. *) val enqueue: 'a * 'a t -> 'a t (* [enqueue (x,q)] adds the element [x] at the of queue [q]. *) val dequeue: 'a t -> 'a t (* [dequeue q] removes the first element in queue [q] *) val first: 'a t -> 'a (* [first q] returns the first element in queue [q] without removing it from the queue, or raises [Empty] if the queue is empty.*) val isempty: 'a t -> bool (* [isempty q] returns [true] if queue [q] is empty, otherwise returns [false]. *) ;; Zdzisław Spławski Programowanie funkcyjne 31
32 Zadania kontrolne a) Napisz strukturę, zgodna z powyższą sygnaturą, w której kolejka jest reprezentowana przez typ konkretny type 'a t = EmptyQueue Enqueue of 'a * 'a t b) Napisz strukturę, zgodna z powyższą sygnaturą, w której kolejka jest reprezentowana przez listę. c) Reprezentacja z punku a) i b) jest mało efektywna, ponieważ operacja wstawiania do kolejki ma złożoność liniową. W lepszej reprezentacji kolejka jest reprezentowana przez parę list. Para list ([x 1 ; x 2 ;...; x m ], [y 1 ; y 2 ;...; y n ]) reprezentuje kolejkę x 1 x 2... x m y n... y 2 y 1. Pierwsza lista reprezentuje początek kolejki, a druga koniec kolejki. Elementy w drugiej liście są zapamiętane w odwrotnej kolejności, żeby wstawianie było wykonywane w czasie stałym (na początek listy). enqueue(y, q) modyfikuje kolejkę następująco: (xl, [y 1 ; y 2 ;...; y n ]) (xl, [y;y 1 ; y 2 ;...; y n ]). Elementy w pierwszej liście są pamiętane we właściwej kolejności, co umożliwia szybkie usuwanie pierwszego elementu. dequeue(q) modyfikuje kolejkę następująco: ([x 1 ; x 2 ;...; x m ], yl) ([x 2 ;...; x m ], yl). Kiedy pierwsza lista zostaje opróżniona, druga lista jest odwracana i wstawiana w miejsce pierwszej: ([], [y 1 ; y 2 ;...; y n ]) ([y n ;... y 2 ; y 1 ], []). Reprezentacja kolejki jest w postaci normalnej, jeśli nie wygląda tak: ([], [y 1 ; y 2 ;...; y n ]) dla n 1. Wszystkie operacje kolejki mają zwracać reprezentację w postaci normalnej, dzięki czemu pobieranie wartości pierwszego elementu nie spowoduje odwracania listy. Odwracanie drugiej listy po opróżnieniu pierwszej też może się wydawać kosztowne. Jeśli jednak oszacujemy nie koszt pesymistyczny (oddzielnie dla każdej operacji kolejki), ale koszt zamortyzowany (uśredniony dla całego czasu istnienia kolejki), to okaże się, że koszt operacji wstawiania i usuwania z kolejki jest stały. Napisz strukturę, zgodna z powyższą sygnaturą, w której kolejka jest reprezentowana w postaci pary list. Zdzisław Spławski Programowanie funkcyjne 32
33 Zadania kontrolne 2. Dana jest następująca sygnatura dla kolejek modyfikowalnych (w pliku queue_mut.mli). (* This module implements queues (FIFOs) with in-place modifications. *) type 'a t (* The type of queues containing elements of type ['a]. *) exception Empty of string (* Raised when [first q] is applied to an empty queue [q]. *) exception Full of string (* Raised when [enqueue (x,q)] is applied to a full queue [q]. *) val empty: int -> 'a t (* [empty n] returns a new queue of length [n], initially empty. *) val enqueue: 'a * 'a t -> unit (* [enqueue (x,q)] adds the element [x] at the of a queue [q]. *) val dequeue: 'a t -> unit (* [dequeue q] removes the first element in queue [q] *) val first: 'a t -> 'a (* [first q] returns the first element in queue [q] without removing it from the queue, or raises [Empty] if the queue is empty.*) val isempty: 'a t -> bool (* [isempty q] returns [true] if queue [q] is empty, otherwise returns [false]. *) val isfull: 'a t -> bool (* [isfull q] returns [true] if queue [q] is full, otherwise returns [false]. *) Zdzisław Spławski Programowanie funkcyjne 33
34 Zadania kontrolne Napisz strukturę, zgodną z powyższą sygnaturą, w której kolejka jest reprezentowana przez tablicę cykliczną. Wykorzystaj mechanizm oddzielnej kompilacji! Nie zapomnij o testach! Program testowy powinien wypisać menu, zawierające wszystkie operacje kolejki i wykonać wybraną operację. Kolejka reprezentowana przez tablicę cykliczną kolejka pusta f r kolejka pełna f f f r a a a b c b r r Zdzisław Spławski Programowanie funkcyjne 34
Wstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2016/2017 Outline Moduły i bariery abstrakcji 1 Moduły i bariery abstrakcji Moduły co to jest i po co to jest? Duży system dzielimy na mniejsze, łatwiejsze
Wykład 9 Funktory (moduły sparametryzowane)
Wykład 9 Funktory (moduły sparametryzowane) Składnia dla funktorów Sygnatura dla słownika Słownik jako binarne drzewo poszukiwań Słownik jako funkcja Zdzisław Spławski Programowanie funkcyjne 1 Programowanie
Wstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline Funktory 1 Funktory Intuicje Funktory Intuicje Funktory to moduły sparametryzowane (innymi modułami). Wykorzystywanie jednych modułów
Wykład 7 Porównanie programowania funkcyjnego i imperatywnego
Wykład 7 Porównanie programowania funkcyjnego i imperatywnego Styl funkcyjny i imperatywny: główne różnice Rekursja czy iteracja Wyrażenie let czy sekwencja Przykład: sortowanie szybkie Dzielenie czy kopiowanie
Obiektowy Caml. Paweł Boguszewski
Obiektowy Caml Paweł Boguszewski Plan prezentacji Charakterystyka języka Składnia Obiektowość w OCamlu Wyjątki Standardowe Moduły Narzędzia wspomagające Bibliografia OCaml OCaml jest obiektowym, funkcyjnym
Wstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline 1 Pojęcie typu Definition (Typ danych) Typ danych to zbiór wartości wraz z zestawem podstawowych operacji na tych wartościach. Typy
Wstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline 1 Podstawowe pojęcia Definition Graf = wierzchołki + krawędzie. Krawędzie muszą mieć różne końce. Między dwoma wierzchołkami może
Wstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2016/2017 Outline 1 Pojęcie typu Definition (Typ danych) Typ danych to zbiór wartości wraz z zestawem podstawowych operacji na tych wartościach. Typy
Metody getter https://www.python-course.eu/python3_object_oriented_programming.php 0_class http://interactivepython.org/runestone/static/pythonds/index.html https://www.cs.auckland.ac.nz/compsci105s1c/lectures/
Wykład 11 Podtypy a dziedziczenie
Wykład 11 Podtypy a dziedziczenie Różne klasy mogą mieć ten sam typ Precyzowanie typu Typ self Relacja bycia podtypem to nie to samo co relacja dziedziczenia Relacja dziedziczenia to nie to samo co relacja
Wstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline Programowanie imperatywne 1 Programowanie imperatywne Intuicje Programowanie imperatywne Paradygmat programowania imperatywnego: program
Struktury danych (I): kolejka, stos itp.
Letnie Warsztaty Matematyczno-Informatyczne Algorytmy i struktury danych Struktury danych (I): kolejka, stos itp. Struktury danych (I): kolejka, stos itp. Struktura danych stanowi sposób uporządkowania
kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,
Korutyny Wykład13,str1 tak działa podprogram: PROGRAM GŁÓWNY wywołanie PODPROGRAM tak działają korutyny: KORUTYNA A resume B resume B KORUTYNA B resume A Korutyny Wykład13,str2 Korutyny mają zwykle więcej
E S - uniwersum struktury stosu
Temat: Struktura stosu i kolejki Struktura danych to system relacyjny r I r i i I U,, gdzie U to uniwersum systemu, a i i - zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów
Wstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline 1 BFS DFS Algorytm Dijkstry Algorytm Floyda-Warshalla Podstawowe pojęcia Definition Graf = wierzchołki + krawędzie. Krawędzie muszą
Wykład 5 Listy leniwe
Wykład 5 Listy leniwe Listy leniwe Funkcjonały dla list leniwych Przykład: generowanie liczb pierwszych metodą sita Eratostenesa Algorytmy przeszukiwania przestrzeni stanów Przykład: problem ośmiu hetmanów
Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)
Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Kontenery - - wektor vector - - lista list - - kolejka queue - - stos stack Kontener asocjacyjny map 2016-01-08 Bazy danych-1 W5 1 Kontenery W programowaniu
Wstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline Zasada dziel i rządź i analiza złożoności 1 Zasada dziel i rządź i analiza złożoności Definition : Zbiór wartości: nieograniczonej
Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)
Języki i Paradygmaty Programowania Laboratorium 1 Obiekty i klasy C++ Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) UWAGA! Umiejętność tworzenia
Wstęp do programowania
Wstęp do programowania Stosy, kolejki, drzewa Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 1 / 25 Listy Lista jest uporządkowanym zbiorem elementów. W Pythonie
Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.
Pakiety Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki. Pakiet składa się ze: specyfikacji (interfejsu) i ciała (implementacji). W specyfikacji mieszczą
Programowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.
Wstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline Imperatywne wskaźnikowe struktury danych 1 Imperatywne wskaźnikowe struktury danych Dwustronne kolejki + sklejanie + odwracanie. module
Wstęp do programowania
wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.
Programowanie obiektowe
Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne.
Programowanie funkcyjne Wykład 13. Siła wyrazu rachunku lambda
Programowanie funkcyjne Wykład 13. Siła wyrazu rachunku lambda Zdzisław Spławski Zdzisław Spławski: Programowanie funkcyjne, Wykład 13. Siła wyrazu rachunku lambda 1 Wstęp Wartości logiczne Liczby naturalne
Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie
Wstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:
Programowanie obiektowe
Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe Informacje
KOLEJKA (QUEUE) (lista fifo first in, first out)
KOLEJKA (QUEUE) (lista fifo first in, first out) Kolejki są listami, których elementy można wstawiać z jednego końca (rear-tył) a usuwać z drugiego (front - przód). Operacje: 1. MAKENULL(Q) czyni kolejkę
Pakiety i interfejsy. Tomasz Borzyszkowski
Pakiety i interfejsy Tomasz Borzyszkowski Pakiety podstawy W dotychczasowych przykładach nazwy klas musiały pochodzić z jednej przestrzeni nazw, tj. być niepowtarzalne tak, by nie doprowadzić do kolizji
Język programowania PASCAL
Język programowania PASCAL (wersja podstawowa - standard) Literatura: dowolny podręcznik do języka PASCAL (na laboratoriach Borland) Iglewski, Madey, Matwin PASCAL STANDARD, PASCAL 360 Marciniak TURBO
Dynamiczne struktury danych
Dynamiczne struktury danych 391 Dynamiczne struktury danych Przez dynamiczne struktury danych rozumiemy proste i złożone struktury danych, którym pamięć jest przydzielana i zwalniana na żądanie w trakcie
TEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
Semantyka i Weryfikacja Programów - Laboratorium 3
Semantyka i Weryfikacja Programów - Laboratorium 3 Modelowanie układów mikroprocesorowych - część II Wykonywanie całego programu Cały program wykonywany jest przez funkcję intpprog. Jedynym argumentem
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Liniowe struktury danych. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład
Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:
Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.
Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)
Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013
Wykład 6 Programowanie imperatywne w języku OCaml
Wykład 6 Programowanie imperatywne w języku OCaml Modyfikowalne struktury danych Wektory (tablice jednowymiarowe) Napisy Rekordy z modyfikowalnymi polami Referencje Polimorfizm i wartości modyfikowalne
Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych
Algorytmy i Struktury Danych Wykład IV Sortowania cd. Elementarne struktury danych 1 Co dziś? Dolna granica sortowań Mediany i statystyki pozycyjne Warstwa implementacji Warstwa abstrakcji #tablice #listy
2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne
Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie
Struktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu
Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji
JAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43
Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,
KOTLIN. Język programowania dla Androida
KOTLIN Język programowania dla Androida Historia Kotlin został opracowany przez firmę JetBrains Prace rozpoczęto w 2011 r., od 2012 r. dostępny na licencji Apache 2. Nazwa pochodzi od wyspy koło Petersburga
Programowanie obiektowe - 1.
Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która
Język PL/SQL Pakiety podprogramów
Język PL/SQL Pakiety podprogramów Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora) 1 Pakiety Pakiet (ang. package) grupuje powiązane
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:
Zmienna i typ Pascal typy danych Zmienna to obiekt, który może przybierać różne wartości. Typ zmiennej to zakres wartości, które może przybierać zmienna. Deklarujemy je w nagłówku poprzedzając słowem kluczowym
Wykład 3 Składnia języka C# (cz. 2)
Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Abstrakcyjne struktury danych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury
Technologie obiektowe
WYKŁAD dr inż. Paweł Jarosz Instytut Informatyki Politechnika Krakowska mail: pjarosz@pk.edu.pl LABORATORIUM dr inż. Paweł Jarosz (3 grupy) mgr inż. Piotr Szuster (3 grupy) warunki zaliczenia Obecność
Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.
Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika. 1. Pojcie struktury danych Nieformalnie Struktura danych (ang. data
Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:
Typy klasowe (klasy) 1. Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która definiuje programy za pomocą obiektów
Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:
Struktura danych Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych: rekord tablica lista stos kolejka drzewo i jego odmiany (np. drzewo
Programowanie obiektowe
Wykład 1 21 lutego 2019 Plan wykładu 1 Opis wykładu Zaliczenie i egzamin Literatura 2 3 Modelowanie obiektowe Abstrakcja Hermetyzacja Dziedziczenie Polimorfizm 4 Opis wykładu Zaliczenie i egzamin Literatura
Język ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Wstęp do Programowania potok funkcyjny
i programowanie dynamiczne Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 i programowanie dynamiczne Outline 1 i programowanie dynamiczne i programowanie dynamiczne Rekurencyjny zapis rozwiązania
Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja
1 struktura, kolekcja Kiedy potrzebne Duża liczba danych takiego samego typu tablice a jak nieznana liczba elementów? dane zawierające wartości różnego typu (osoba: pesel, nazwisko, rok urodzenia, pracuje/niepracuje,
Wyzwalacze. Anna Fiedorowicz Bazy danych 2
Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych
KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Typy, klasy typów, składnie w funkcji
Typy, klasy typów, składnie w funkcji Typy w Haskell Każde wyrażenie w Haskell posiada zdefiniowany typ. Dzięki temu już na etapie kompilacji kodu następuje sprawdzenie poprawności kodu i zabezpiecza nas
Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel
Wstęp do programowania Listy Piotr Chrząstowski-Wachtel Do czego stosujemy listy? Listy stosuje się wszędzie tam, gdzie występuje duży rozrzut w możliwym rozmiarze danych, np. w reprezentacji grafów jeśli
Wykład 4. Klasa List Kolejki Stosy Słowniki
Wykład 4 Klasa List Kolejki Stosy Słowniki Klasa List Poważną niedogodnością tablic jako kolekcji danych jest fakt, że muszą one mieć stały rozmiar. Programista musi wiedzieć z góry ile miejsca powinien
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.
Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Podstawowe struktury danych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych.
Paradygmaty programowania
Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów
Delphi Laboratorium 3
Delphi Laboratorium 3 1. Procedury i funkcje Funkcja jest to wydzielony blok kodu, który wykonuje określoną czynność i zwraca wynik. Procedura jest to wydzielony blok kodu, który wykonuje określoną czynność,
Semantyka i Weryfikacja Programów - Laboratorium 3
Semantyka i Weryfikacja Programów - Laboratorium 3 Cz. I. Rachunek w sklepie Problem. Kasa sklepu zawiera rejestr danych łączących kody artykułów (np. paskowe) z ich nazwami i cenami. Konkretny zakup kasa
Algorytmy i Struktury Danych. Anna Paszyńska
Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;
Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,
Wstęp do programowania. Różne różności
Wstęp do programowania Różne różności Typy danych Typ danych określa dwie rzeczy: Jak wartości danego typu są określane w pamięci Jakie operacje są dozwolone na obiektach danego typu 2 Rodzaje typów Proste
- nawiasy kwadratowe oznaczają, że to lista
Haskell jest statycznym typem języka: - wszystkie typy i wyrażenia są znane w czasie kompilacji ( zwiększa to bezpieczeństwo kodu). Podawanie typów zmiennych i argumentów funkcji jest zbędne, gdyż Haskel
Ćwiczenie 1. Kolejki IBM Message Queue (MQ)
Ćwiczenie 1. Kolejki IBM Message Queue (MQ) 1. Przygotowanie Przed rozpoczęciem pracy, należy uruchomić "Kreator przygotowania WebSphere MQ" oraz przejść przez wszystkie kroki kreatora, na końcu zaznaczając
Procedury i funkcje składowane
Procedury i funkcje składowane Zmienne podstawienia i zmienne wiązane, podprogramy, procedury składowane, typy argumentów, wywoływanie procedur, funkcje składowane, poziomy czystości funkcji, funkcje tablicowe
Zaawansowane programowanie w C++ (PCP)
Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania
Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C
#import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:
Programowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 03 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas abstrakcyjnych i interfejsów. Wprowadzenie
Kurs programowania. Wykład 9. Wojciech Macyna
Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,
Podstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Wykład 12. Programowanie serwera MS SQL 2005 w C#
Wykład 12 Programowanie serwera MS SQL 2005 w C# Budowa procedur składowanych w C# Budowa funkcji składowanych w C# Wykorzystanie funkcji składowanych w C# po stronie klienta Tworzenie typów definiowanych
Stos liczb całkowitych
Stos liczb całkowitych class StosInt int* tab; unsigned size ; StosInt(unsigned s=10) tab=new int[size=s];top=0; ~StosInt()delete[] tab; void push(int i)tab[top++]=i; int pop(void) return tab[--top]; int
Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/
Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i
Programowanie obiektowe
Programowanie obiektowe Wykład 5 Marcin Młotkowski 23 marca 2017 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 50 Historia Początkowe założenia Projekt OAK Sterowanie urządzeniami
Dawid Gierszewski Adam Hanasko
Dawid Gierszewski Adam Hanasko Chcemy stworzyć klasę w której możemy przechowywać dwie zmienne dowolnych typów Tworzymy tyle różnych klas ile potrzeba: Class ParaInt{ int pierwszy; Int drugi; Class ParaButow{
Programowanie RAD Delphi
Programowanie RAD Delphi Dr Sławomir Orłowski Zespół Fizyki Medycznej, Instytut Fizyki, Uniwersytet Mikołaja Kopernika w Toruniu Pokój: 202, tel. 611-32-46, e-mial: bigman@fizyka.umk.pl Delphi zasoby Aplikacje
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Wykład 3 Funkcje wyższych rzędów
Wykład 3 Funkcje wyższych rzędów Funkcje jako dane Rozwijanie i zwijanie funkcji Składanie funkcji Funkcjonały dla list Funkcje wyższego rzędu jako struktury sterowania Semantyka denotacyjna prostego języka
Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL
Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL Pakiety podprogramów, specyfikacja i ciało pakietu, zmienne i kursory pakietowe, pseudoinstrukcje (dyrektywy kompilatora), dynamiczny SQL.
Wstęp do Programowania potok funkcyjny
Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011 Outline Procedury wyższych rzędów 1 Procedury wyższych rzędów jako abstrakcje konstrukcji programistycznych Intuicje Procedury wyższych rzędów
Wstęp do programowania 2
Wstęp do programowania 2 wykład 1 rekordy z wyróżnikami Agata Półrola Wydział Matematyki UŁ 2005/2006 Egzamin z I roku - problemy Problemy z wczytywaniem danych: skip_line Problemy z obliczeniami: zerowanie
Programowanie w języku Python. Grażyna Koba
Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i
Programowanie i projektowanie obiektowe
Programowanie i projektowanie obiektowe Klasy i obiekty Paweł Daniluk Wydział Fizyki Jesień 2011 P. Daniluk (Wydział Fizyki) PO w. V Jesień 2011 1 / 13 Typy danych (w Javie) Typy pierwotne typ wartości