Przygotował: Jacek Sroka. PO* - Scala (typy uogólnione, listy)
|
|
- Karolina Czajkowska
- 8 lat temu
- Przeglądów:
Transkrypt
1 1 PO* - Scala (typy uogólnione, listy)
2 2 Przykład: stos abstract class IntStack { def push(x: Int): IntStack = new IntNonEmptyStack(x, this) def isempty: Boolean def top: Int def pop: IntStack class IntEmptyStack extends IntStack { def isempty = true def top = error("emptystack.top") def pop = error("emptystack.pop") class IntNonEmptyStack(elem: Int, rest: IntStack) extends IntStack { def isempty = false def top = elem def pop = rest No to teraz jeszcze raz dla stosu napisów?
3 3 Typy generyczne abstract class Stack[A] { def push(x: A): Stack[A] = new NonEmptyStack[A](x, this) def isempty: Boolean def top: A def pop: Stack[A] class EmptyStack[A] extends Stack[A] { def isempty = true def top = error("emptystack.top") def pop = error("emptystack.pop") class NonEmptyStack[A](elem: A, rest: Stack[A]) extends Stack[A] { def isempty = false def top = elem def pop = rest val x = new EmptyStack[Int] val y = x.push(1).push(2) println(y.pop.top)
4 4 Polimorficzne metody Metody i ich parametry też można parametryzować typem def isprefix[a](p: Stack[A], s: Stack[A]): Boolean = { p.isempty p.top == s.top && isprefix[a](p.pop, s.pop) val s1 = new EmptyStack[String].push("abc") val s2 = new EmptyStack[String].push("abx").push(s1.top) println(isprefix[string](s1, s2)) Niezależnie od generyczności klasy object PolyTest extends Application { def dup[t](x: T, n: Int): List[T] = if (n == 0) Nil else x :: dup(x, n 1) println(dup[int](3, 4)) println(dup("three", 3))//scala ma dobry algorytm type inference
5 5 Ograniczanie typu Dowolny typ to czasami za dużo abstract class Set[A] { def incl(x: A): Set[A] def contains(x: A): Boolean //dla implementacji z drzewami BST def contains(x: A): Boolean = if (x < elem) left contains x ^ < not a member of type A. Można go ograniczyć (do typów które da się porównywać) trait Set[A <: Ordered[A]] { def incl(x: A): Set[A] def contains(x: A): Boolean
6 6 Ograniczanie typu c.d. /** A class for totally ordered data. */ trait Ordered[A] { /** Result of comparing this with operand that. * returns x where * x < 0 iff this < that * x == 0 iff this == that * x > 0 iff this > that */ def compare(that: A): Int def < (that: A): Boolean = (this compare that) < 0 def > (that: A): Boolean = (this compare that) > 0 def <= (that: A): Boolean = (this compare that) <= 0 def >= (that: A): Boolean = (this compare that) >= 0 def compareto(that: A): Int = compare(that)
7 7 Parametryzowane drzewa BST class EmptySet[A <: Ordered[A]] extends Set[A] { def contains(x: A): Boolean = false def incl(x: A): Set[A] = new NonEmptySet(x, new EmptySet[A], new EmptySet[A]) class NonEmptySet[A <: Ordered[A]] (elem: A, left: Set[A], right: Set[A]) extends Set[A] { def contains(x: A): Boolean = if (x < elem) left contains x else if (x > elem) right contains x else true def incl(x: A): Set[A] = if (x < elem) new NonEmptySet(elem, left incl x, right) else if (x > elem) new NonEmptySet(elem, left, right incl x) else this //brakujące parametry typu w konst. są uzupełniane tak jak dla metod
8 8 Drzewa BST na liczbach Element drzewa case class Num(value: Double) extends Ordered[Num] { def compare(that: Num): Int = if (this.value < that.value) -1 else if (this.value > that.value) 1 else 0 Poprawne użycie val s = new EmptySet[Num].incl(Num(1.0)).incl(Num(2.0)) s.contains(num(1.5)) Niepoprawne użycie val s = new EmptySet[java.io.File] ^ java.io.file does not conform to type parameter bound Ordered[java.io.File].
9 9 View bounds A co jeśli nie możemy decydować o nadklasie? trait Set[A <% Ordered[A]]... class EmptySet[A <% Ordered[A]]... class NonEmptySet[A <% Ordered[A]]... O konwersjach i view bounds jeszcze opowiemy
10 10 Subtyping co-variant subtyping class Stack[+A] {... Jeśli T jest podtypem S to Stack[T] jest podtypem Stack[S] contra-variant subtyping class Stack[-A] {... Jeśli T jest podtypem S to Stack[S] jest podtypem Stack[T] non-variant subtyping (domyślnie) nie ma zależności
11 Czemu co-variant nie jest domyślne? W świecie funkcyjnym mogłoby być Jeżeli obiekty mogą zmieniać stan trzeba kontrolować typy w chwili wykonania class Array[A] { def appply(index: Int): A def update(index: Int, elem: A) //Scala stara się to mapować na natywne tablice środowiska val x = new Array[String](1) val y: Array[Any] = x y(0) = new Rational(1, 2) //lukier syntaktyczny dla //y.update(0, new Rational(1, 2)) czyli w tablicy napisów znalazła się liczba! W Javie dla tablic mamy co-variant subtyping i dodatkową kontrolę w trzeciej linijce (ArrayStoreException) Ze względu na non-variant subtyping w Scali druga linia jest niedozwolona Tak! Dla tablic jest co-variant mimo że dla innych typów jest non-variant! 11
12 12 Statyczne ograniczanie co-variant subtyping Parametr co-variant może być w Scali użyty jedynie jako typ: atrybutu klasy, wartości zwrotnej metody, argument jakiejś innej klasy co-variant Nie może jako typ parametru metody (bo metody mogą zmieniać stan obiektu) class Array[+A] { def apply(index: Int): A def update(index: Int, elem: A) ^ covariant type parameter A appears in contravariant position. A co z metodami nie zmieniającymi stanu (stos jest w pełni funkcyjny) class Stack[+A] { def push(x: A): Stack[A] = ^ covariant type parameter A appears in contravariant position.
13 13 Co-variant subtyping i niezmieniające stanu metody Można uogólnić metodę push class Stack[+A] { def push[b >: A](x: B): Stack[B] = new NonEmptyStack(x, this) T >: S oznacza, że T może być nadtypem S można łączyć oba zapisy T >: S <: U Czyli w wyniku push możemy dostać zbiór bardziej ogólnego typu Rozwiązując problem parametrów co-variant uogólniliśmy nasze rozwiązanie
14 14 Najmniejsze typy W Scali typami nie można parametryzować obiektów dlatego musimy zdefiniować klasę EmptyStack[A] dla stosów co-variant moglibyśmy sobie poradzić mając podtyp wszystkich typów Typ Nothing jest najmniejszym typem i nie zawiera żadnej wartości (czyli Stack[Nothing] nie ma żadnych elementów) object EmptyStack extends Stack[Nothing] {... val s = EmptyStack.push("abc").push(new AnyRef()) EmptyStack jest typu Stack[Nothing], więc ma metodę push[b >: Nothing](elem: B): Stack[B] z type inference wiemy, że B to String, więc wynikiem jest Stack[String] push[b >: String](elem: B): Stack[B] teraz B to AnyRef, więc wynikiem jest Stack[AnyRef]
15 15 Null Nothing jest podtypem wszystkich typów Null jest podtypem AnyRef i wszystkich jego podtypów Null posiada tylko jedną wartość null Czyli null jest kompatybilne ze wszystkimi obiektami, ale nie z wartościami typów podstawowych
16 16 Podsumowanie abstract class Stack[+A] { def push[b >: A](x: B): Stack[B] = new NonEmptyStack(x, this) def isempty: Boolean def top: A def pop: Stack[A] object EmptyStack extends Stack[Nothing] { def isempty = true def top = error("emptystack.top") def pop = error("emptystack.pop") class NonEmptyStack[+A](elem: A, rest: Stack[A]) extends Stack[A] { def isempty = false def top = elem def pop = rest
17 17 Krotki Czasami funkcja zwraca kilka wartości case class TwoInts(first: Int, second: Int) def divmod(x: Int, y: Int): TwoInts = new TwoInts(x / y, x % y) Scala ma wbudowany typ generyczny do reprezentowania krotek package scala case class Tuple2[A, B](_1: A, _2: B) def divmod(x: Int, y: Int) = new Tuple2[Int, Int](x / y, x % y) Są też krotki o większej liczbie elementów (oczywiście są jakieś ograniczenia) Dostęp do elementów krotki (tak jak do innych case classes) val xy = divmod(x, y) println("quotient: " + xy._1 + ", rest: " + xy._2) divmod(x, y) match { case Tuple2(n, d) => println("quotient: " + n + ", rest: " + d) //we wzorcach nie używamy type parameters (Tuples2[Int, Int](n,d))
18 18 Lukier syntaktyczny Zamiast Tuplen(x1,..., xn) można napisać (x1,..., xn) def divmod(x: Int, y: Int): (Int, Int) = (x / y, x % y) divmod(x, y) match { case (n, d) => println("quotient: " + n + ", rest: " + d)
19 19 Funkcje Wszystko w Skali jest obiektem Funkcje w Scali są zwykłymi wartościami Czyli funkcje są obiektami (T1,..., Tn) => S Functionn[T1,..., Tn, S] Przykładowy trait dla funkcji z jednym argumentem package scala trait Function1[-A, +B] { def apply(x: A): B f(x) to skrót dla f.apply(x) to dlatego Array miało metodę apply class Array[A] { def apply(index: Int): A //stąd skrót a(i) odpowiada a.apply(i) def update(index: Int, elem: A)
20 20 Tu się przydaje contra-variant subtyping val f: (AnyRef => Int) val g: (String => Int) g("abc") Dla funkcji mamy co-variant dla wartości zwrotnej i contra-variant dla wartości argumentów S=>T jest podtypem S'=>T' jeżeli S' jest podtypem S i T jest podtypem T'
21 21 Przykład: funkcje Deklaracja: val plus1: (Int => Int) = (x: Int) => x + 1 plus1(2) Rozwija się do: val plus1: Function1[Int, Int] = new Function1[Int, Int] { def apply(x: Int): Int = x + 1 plus1.apply(2) new Function1[Int, Int] {... to klasa anonimowa val plus1: Function1[Int, Int] = { class Local extends Function1[Int, Int] { def apply(x: Int): Int = x + 1 new Local: Function1[Int, Int] plus1.apply(2)
22 22 Listy Są podobne do tablic, ale niemutowalne mają rekurencyjną budowę udostępniają więcej operacji val fruit = List("apples", "oranges", "pears") val nums = List(1, 2, 3, 4) val diag3 = List(List(1, 0, 0), List(0, 1, 0), List(0, 0, 1)) val empty = List()
23 23 Typ listy Tak jak tablice są homogeniczne Ich typ zapisujemy List[T] val fruit: List[String] = List("apples", "oranges", "pears") val nums : List[Int] = List(1, 2, 3, 4) val diag3: List[List[Int]] = List(List(1, 0, 0), List(0, 1, 0), List(0, 0, 1)) val empty: List[Int] = List()
24 24 Jeszcze trochę lukru Można korzystać z notacji (tak naprawdę poprzedni zapis się do niej sprowadza) Nil, :: val fruit = "apples" :: ("oranges" :: ("pears" :: Nil)) :: jest prawostronnie łączny val nums = 1 :: 2 :: 3 :: 4 :: Nil val diag3 = (1 :: 0 :: 0 :: Nil) :: (0 :: 1 :: 0 :: Nil) :: (0 :: 0 :: 1 :: Nil) :: Nil val empty = Nil List ma też podstawowe operacje empty.isempty = true fruit.isempty = false fruit.head = "apples" fruit.tail.head = "oranges" diag3.head = List(1, 0, 0)
25 25 Przykład: sortowanie isempty, head i tail oraz rekurencja pozwalają zdefiniować na listach wszystkie operacje, np. sortowanie przez wstawianie def isort(xs: List[Int]): List[Int] = if (xs.isempty) Nil else insert(xs.head, isort(xs.tail)) :: to tak naprawdę case class def isort(xs: List[Int]): List[Int] = xs match { case List() => List() case x :: xs1 => insert(x, isort(xs1)) def insert(x: Int, xs: List[Int]): List[Int] = xs match { case List() => List(x) case y :: ys => if (x <= y) x :: xs else y :: insert(x, ys)
26 26 Definicja w pakiecie scala Klasa List jest zdefiniowana w pakiecie scala z parametrem co-variant package scala abstract class List[+A] { Przykładowe implementacje metod def isempty: Boolean = this match { case Nil => true case x :: xs => false def head: A = this match { case Nil => error("nil.head") case x :: xs => x def tail: List[A] = this match { case Nil => error("nil.tail") case x :: xs => xs
27 Inne funkcje Długość listy (oczywiście da się zastosować rekurencję ogonową) def length: Int = this match { case Nil => 0 case x :: xs => 1 + xs.length Ostatni element na liście def last: A = this match { case Nil => error("nil.last") case x :: Nil => x case x :: xs => xs.last Wszystko bez ostatniego elementu def init: A = this match { case Nil => error("nil.last") case x :: Nil => Nil case x :: xs => x::xs.init 27
28 28 Inne funkcje c.d. Pierwsze n, wszystko bez pierwszych n oraz podział def take(n: Int): List[A] = if (n == 0 isempty) Nil else head :: tail.take(n-1) def drop(n: Int): List[A] = if (n == 0 isempty) this else tail.drop(n-1) def split(n: Int): (List[A], List[A]) = (take(n), drop(n)) xs.drop(m).take(n m) //daje elementy od m+1 do n def apply(n: Int): A = drop(n-1).head //czyli działa lukier xs.apply(3) = xs(3) Z pary list tworzy listę par (ucina dłuższą listę) def zip[b](that: List[B]): List[(A,B)] = if (this.isempty that.isempty) Nil else (this.head, that.head) :: (this.tail zip that.tail)
29 29 Operator :: Operatory kończące się dwukropkiem są szczególne Są traktowane jako metody prawego operandu x :: y = y.::(x) zamiast x + y = x.+(y) Mimo to zachowują kolejność wyliczania operandów od lewej D :: E tłumaczy się do {val x = D; E.::(x) Są prawostronnie łączne x :: y :: z = x :: (y :: z) zamiast x + y + z = (x + y) + z Przykładowa definicja def ::[B >: A](x: B): List[B] = new scala.::(x, this)
30 30 Konkatenacja i odwracanie ::: to operator konkatenacji (też kończy się dwukropkiem) xs ::: ys ::: zs = xs ::: (ys ::: zs) = zs.:::(ys).:::(xs) def :::[B >: A](prefix: List[B]): List[B] = prefix match { case Nil => this case p :: ps => this.:::(ps).::(p) Odwrócona lista def reverse[a](xs: List[A]): List[A] = xs match { case Nil => Nil case x :: xs => reverse(xs) ::: List(x) Ta implementacja jest kwadratowa (bo konkatenacja jest liniowa względem długości pierwszego operandu), ale można lepiej
31 31 Merge sort def msort[a](less: (A, A) => Boolean)(xs: List[A]): List[A] = { def merge(xs1: List[A], xs2: List[A]): List[A] = if (xs1.isempty) xs2 else if (xs2.isempty) xs1 else if (less(xs1.head, xs2.head)) xs1.head :: merge(xs1.tail, xs2) else xs2.head :: merge(xs1, xs2.tail) val n = xs.length/2 if (n == 0) xs else merge(msort(less)(xs take n), msort(less)(xs drop n)) msort((x: Int, y: Int) => x < y)(list(5, 7, 1, 3)) val intsort = msort((x: Int, y: Int) => x < y) val reversesort = msort((x: Int, y: Int) => x > y)
32 32 Typowe operacje wyższego rzędu Przetworzenie każdego elementu przy pomocy jakiejś funkcji Wydobycie wszystkich elementów spełniających zadane kryterium Agregacja wszystkich elementów przy pomocy jakiegoś operatora
33 33 map Motywacja skalowanie każdego elementu przez jakiś współczynnik def scalelist(xs: List[Double], factor: Double): List[Double] = xs match { case Nil => xs case x :: xs1 => x * factor :: scalelist(xs1, factor) Uogólniona definicja z List def map[b](f: A => B): List[B] = this match { case Nil => this case x :: xs => f(x) :: xs.map(f) Skalowanie jeszcze raz def scalelist(xs: List[Double], factor: Double) = xs map (x => x * factor) Zwracanie kolumny z tablicy reprezentowanej jako lista wierszy def column[a](xs: List[List[A]], index: Int): List[A] = xs map (row => row(index))
34 34 foreach Podobna do map, ale nie produkuje wyniku (tylko dla efektów ubocznych) def foreach(f: A => Unit) { this match { case Nil => () case x :: xs => f(x); xs.foreach(f) Przykładem efektu ubocznego jest wypisywanie xs foreach (x => println(x))
35 35 filter Motywacja zwracanie wszystkich elementów dodatnich def poselems(xs: List[Int]): List[Int] = xs match { case Nil => xs case x :: xs1 => if (x > 0) x :: poselems(xs1) else poselems(xs1) Uogólniona definicja z List def filter(p: A => Boolean): List[A] = this match { case Nil => this case x :: xs => if (p(x)) x :: xs.filter(p) else xs.filter(p) Elementy dodatnie jeszcze raz def poselems(xs: List[Int]): List[Int] = xs filter (x => x > 0)
36 36 Kwantyfikatory Definicja def forall(p: A => Boolean): Boolean = isempty (p(head) && (tail forall p)) def exists(p: A => Boolean): Boolean =!isempty && (p(head) (tail exists p)) Przykład: sprawdzanie czy liczba jest pierwsza def isprime(n: Int) = List.range(2, n) forall (x => n % x!= 0) //gdzie package scala object List {... def range(from: Int, end: Int): List[Int] = if (from >= end) Nil else from :: range(from + 1, end)
37 37 Agregowanie Motywacja sum(list(x1,..., xn )) = 0 + x xn product(list(x1,..., xn )) = 1 * x1 *... * xn Implementacja wprost: def sum(xs: List[Int]): Int = xs match { case Nil => 0 case y :: ys => y + sum(ys) def product(xs: List[Int]): Int = xs match { case Nil => 1 case y :: ys => y * product(ys)
38 38 reduceleft Wspólny motyw List(x1,..., xn ).reduceleft(op) = (...(x1 op x2 ) op... ) op xn def sum(xs: List[Int]) = (0 :: xs) reduceleft {(x, y) => x + y def product(xs: List[Int]) = (1 :: xs) reduceleft {(x, y) => x * y Przykładowa definicja def reduceleft(op: (A, A) => A): A = this match { case Nil => error("nil.reduceleft") case x :: xs => (xs foldleft x)(op) def foldleft[b](z: B)(op: (B, A) => B): B = this match { case Nil => z case x :: xs => (xs foldleft op(z, x))(op) foldleft można też użyć bezpośrednio (List(x1,..., xn ) foldleft z)(op) = (...(z op x1 ) op... ) op xn def sum(xs: List[Int]) = (xs foldleft 0) {(x, y) => x + y def product(xs: List[Int]) = (xs foldleft 1) {(x, y) => x * y
39 39 reduce... Redukcję można też wykonywać w prawo List(x1,..., xn ).reduceright(op) = x1 op (... (xn 1 op xn )...) (List(x1,..., xn ) foldright acc)(op) = x1 op (... (xn op acc)...) Przykładowa definicja def reduceright(op: (A, A) => A): A = this match { case Nil => error("nil.reduceright") case x :: Nil => x case x :: xs => op(x, xs.reduceright(op)) def foldright[b](z: B)(op: (A, B) => B): B = this match { case Nil => z case x :: xs => op(x, (xs foldright z)(op)) Synonimy def /:[B](z: B)(f: (B, A) => B): B = foldleft(z)(f) def :\[B](z: B)(f: (A, B) => B): B = foldright(z)(f) Co pasuje do zasady że operator kończący się : jest wywoływany dla prawego operandu (z /: List(x1,..., xn ))(op) = (...(z op x1 ) op... ) op xn (List(x1,..., xn ) :\ z)(op) = x1 op (... (xn op z)...)
40 40 flatten Łączy listy z listy list def flatten[a](xs: List[List[A]]): List[A] = (xs :\ (Nil: List[A])) {(x, xs) => x ::: xs A co z alternatywną definicją (która działa szybciej)? def flatten[a](xs: List[List[A]]): List[A] = ((Nil: List[A]) /: xs) ((xs, x) => xs ::: x) Prawdziwy flatten jest w obiekcie List List.flatten
41 41 Liniowe reverse Odgadnijmy czym zastąpić? def reverse: List[A] = (z? /: this)(op?) Nil = Nil.reverse // by specification = (z /: Nil)(op) // by the template for reverse = (Nil foldleft z)(op) // by the definition of /: = z // by definition of foldleft List(x) = List(x).reverse // by specification = (Nil /: List(x))(op) // by the template for reverse, with z = Nil = (List(x) foldleft Nil)(op) // by the definition of /: = op(nil, x) // by definition of foldleft // czyli op(x,y) = y :: x
42 42 Liniowe reverse Czyli def reverse: List[A] = ((Nil: List[A]) /: this) {(xs, x) => x :: xs adnotacja typu jest potrzebna Nil = Nil.reverse // by specification = (z /: Nil)(op) // by the template for reverse = (Nil foldleft z)(op) // by the definition of /: = z // by definition of foldleft List(x) = List(x).reverse // by specification = (Nil /: List(x))(op) // by the template for reverse, with z = Nil = (List(x) foldleft Nil)(op) // by the definition of /: = op(nil, x) // by definition of foldleft
43 43 Przykład Przy pomocy tych funkcji można rozwiązać wiele problemów dla których imperatywnie potrzebowaliśmy zagnieżdżonych pętli Przykład: dla danego n znaleźć wszystkie pary 1 <= j < i < n takie że i+j jest pierwsza Dla n=7 i j i+j Rozwiązanie w dwóch krokach Generujemy pary i,j Filtrujemy List.range(2, n).map(i => List.range(1, i).map(x => (i, x))).foldright(list[(int, Int)]()) {(xs, ys) => xs ::: ys.filter(pair => isprime(pair._1 + pair._2))
44 44 Przykład c.d. Kombinacja mapowania i konkatenacji jest tak często spotykana, że jest skrót (lub przy pomocy naszego flatten) abstract class List[+A] {... def flatmap[b](f: A => List[B]): List[B] = this match { case Nil => Nil case x :: xs => f(x) ::: (xs flatmap f) Nowe rozwiązanie List.range(2, n).flatmap(i => List.range(1, i).map(x => (i, x))).filter(pair => isprime(pair._1 + pair._2))
PO* - Scala (typy uogólnione, listy)
1 PO* - Scala (typy uogólnione, listy) przygotował Jacek Sroka w oparciu o materiały Martina Oderskiego 2 Przykład: stos abstract class IntStack { def push(x: Int): IntStack = new IntNonEmptyStack(x, this)
Przygotował: Jacek Sroka. PO* - Scala (iteratory, leniwość, view bounds i konwersje)
1 PO* - Scala (iteratory, leniwość, view bounds i konwersje) 2 Iteratory Iteratory to imperatywne wersje strumieni Po danych poruszamy się metodami hasnext() i next() (może nie być struktury danych) trait
Scala + NetBeans AKA: Nowoczesne obiektowe języki programowania i środowiska programistyczne na przykładzie Scali i środowiska NetBeans
1 Scala + NetBeans AKA: Nowoczesne obiektowe języki programowania i środowiska programistyczne na przykładzie Scali i środowiska NetBeans (spotkanie 4) 2 For-Comprehensions Przypominają zapytania Ułatwiają
Scala. Obiektowo-funkcyjny język programowania. Zbyszek Skowron
Scala Obiektowo-funkcyjny język programowania Zbyszek Skowron 4 czerwca 2007 Wprowadzenie Scala jest obiektowo-funkcyjnym jezykiem programowania zaprojektowanym przez Martina Odersky'ego. Inne projekty
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
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
Wstęp do programowania
Wstęp do programowania Programowanie funkcyjne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 1 / 25 Paradygmaty programowania Programowanie imperatywne Program
Scala. Wprowadzenie do języka.
Scala Wprowadzenie do języka. 1 1 whoami Michał Januszewski twitter.com/mjanuszewski michal@mjanuszewski.pl 2 2 Other activities * www.kropkapodi.pl 3 3 Krótka historia......czyli co, po co i dlaczego...
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
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
REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał
REKURENCJA W JĘZYKU HASKELL Autor: Walczak Michał CZYM JEST REKURENCJA? Rekurencja zwana rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje.
Programowanie Funkcyjne. Marcin Kubica Świder,
Programowanie Funkcyjne Marcin Kubica Świder, 28-04-2015 Czym jest programowanie funkcyjne? Obliczalne pojęcia matematyczne. Definicje stałych i funkcji i relacji. Wszystkie definicje są konstruktywne,
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
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
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
Platformy Programistyczne Podstawy języka Java
Platformy Programistyczne Podstawy języka Java Agata Migalska 6 maja 2014 Plan wykładu 1 Sztuka wysławiania się w języku Java 2 Cały świat jest obiektem 3 Kolekcje 4 Zmienne i metody statyczne 5 Słowo
Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
Listy, krotki, słowniki, funkcje
Listy, krotki, słowniki, funkcje Listy Lista jest najbardziej elastycznym typem obiektu uporządkowanej kolekcji. Może zawierać różne typy danych - liczby, łańcuchy znaków, a nawet inne listy. Tworzy się
Polimorfizm a klasy generyczne w języku Java. Zdzisław Spławski 1
Polimorfizm a klasy generyczne w języku Java Zdzisław Spławski 1 Klasyfikacja polimorfizmów Polimorfizm ogólnie oznacza wielopostaciowość i umożliwia przypisanie różnych
Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]
1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie
Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne
Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne dr inż. Marcin Szlenk Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych m.szlenk@elka.pw.edu.pl Paradygmaty
Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6
Instrukcja 6 Laboratorium 8 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji
Języki programowania Haskell
Języki programowania Haskell zadanie projektowe nr. 4 2014/15 K. Turowski, T. Goluch 1. Kompilacja, uruchamianie i Hello world Kompilacja i uruchamianie: ghc --make hello.hs./hello Interaktywny interpreter:
λ parametry. wartość funkcji suma = λ x y. x + y kwadrat = λ x. x * x K.M. Ocetkiewicz, 2008 WETI, PG 2 K.M. Ocetkiewicz, 2008 WETI, PG 3
Organizacja przedmiotu Języki programowania (Programming language concepts) Krzysztof M. Ocetkiewicz pok. 205 email: Krzysztof.Ocetkiewicz@eti.pg.gda.pl konsultacje: czwartek 10:15-11.00, 13:15-14:00 projekt:
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
Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór
Klasy generyczne Klasy generyczne Klasy generyczne są to klasy o parametryzowanych typach danych. Klasy generyczne posiadają kompletną implementację, jednak nie definiują typów danych wykorzystanych w
Programowanie. Lista zadań nr 15. Na ćwiczenia 11, 19 i 23 czerwca 2008
Programowanie Lista zadań nr 15 Na ćwiczenia 11, 19 i 23 czerwca 2008 Zadanie 1. Pokaż, że w systemie z polimorfizmem parametrycznym można napisać program P n rozmiaru O(n), którego typ ma rozmiar 2 2Ω(n).
Elementy języka Haskell
Elementy języka Haskell Cechy języka Historia języka Proste przykłady Środowisko interakcyjne Typy i klasy Definiowanie funkcji Wyrażenia listowe Deklarowanie typów, danych i klas Monady Cechy języka zwięzłe
Odczyt danych z klawiatury Operatory w Javie
Odczyt danych z klawiatury Operatory w Javie Operatory W Javie występują następujące typy operatorów: Arytmetyczne. Inkrementacji/Dekrementacji Przypisania. Porównania. Bitowe. Logiczne. Pozostałe. Operacje
Podstawy programowania. Podstawy C# Tablice
Podstawy programowania Podstawy C# Tablice Tablica to indeksowany zbiór elementów Tablica jest typem referencyjnym (deklaracja tworzy tylko referencję, sama tablica musi być utworzona oddzielnie, najprościej
Specyfikacje formalne
Specyfikacje formalne część II Piotr Szczepański Na podstawie: Formal Specification, Andreas Roth, Peter H. Schmitt Krótkie przypomnienie JML Co to jest formalna specyfikacja? Co to jest OCL? Składnia
Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa
Informatyka 1 Wykład III Wyrażenia i instrukcje, złożoność obliczeniowa Robert Muszyński ZPCiR ICT PWr Zagadnienia: składnia wyrażeń, drzewa rozbioru gramatycznego i wyliczenia wartości wyrażeń, operatory
FP vs OOP? Mikołaj Fejzer
FP vs OOP? Mikołaj Fejzer Versus? http://roflcopter.pl/4591 Versus OOP Kapsułkowanie Hierarhia klas, dziedziczenie Zmiana stanu w czasie Polimorfizm podtypu FP Funkcje jako typy pierwszego rzędu Algebraiczne
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,
Szablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1, 13.05.2014
Automaty do zadań specjalnych Olga Maciaszek-Sharma, Artur Kotow Wersja 1, 13.05.2014 Agenda Kilka pytań do publiczności Po co się męczyć? Studium przypadku Olympus Wprowadzenie Opis rozwiązania Wnioski
Programowanie obiektowe
Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych
Scala + NetBeans AKA: Nowoczesne obiektowe języki programowania i środowiska programistyczne na przykładzie Scali i środowiska NetBeans
1 Scala + NetBeans AKA: Nowoczesne obiektowe języki programowania i środowiska programistyczne na przykładzie Scali i środowiska NetBeans (spotkanie 6) 2 Iteratory Iteratory to imperatywne wersje strumieni
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
Języki i Paradygmaty Programowania
Języki i Paradygmaty Programowania Odkrywamy Haskell Marcin Benke 24 lutego 2014 Odkrywamy Haskell Haskell zasadniczo kompilowany, ale też interpreter: ghci $ ghci GHCi, version 7.6.2: http://www.haskell.org/ghc/
Wykład 8. Moduły. Zdzisław Spławski Programowanie funkcyjne 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
Programowanie Komputerów
Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 28 1. Tablice w C# Indeksowane od zera
Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści
Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop. 2016 Spis treści Przedmowa 1 Stosowana notacja 1 1. Wprowadzenie 3 1.1. Konsola interaktywna języka Scala 3 1.2. Zmienne 5 1.3. Wartości
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{
Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python
Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python Język PYTHON Podstawowe informacje Python to język skryptowy, interpretowany - co oznacza, że piszemy skrypt, a następnie wykonujemy go za
Systemy GIS Tworzenie zapytań w bazach danych
Systemy GIS Tworzenie zapytań w bazach danych Wykład nr 6 Analizy danych w systemach GIS Jak pytać bazę danych, żeby otrzymać sensowną odpowiedź......czyli podstawy języka SQL INSERT, SELECT, DROP, UPDATE
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
Podstawowe części projektu w Javie
Podstawowe części projektu w Javie Pakiet w Javie to grupa podobnych typów klas, interfejsów i podpakietów. Pakiet w Javie może być wbudowany lub zdefiniowany przez użytkownika. Istnieje wiele wbudowanych
Abstrakcyjny typ danych
Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są
Wstęp do programowania
wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych
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;
Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)
Algorytmy i struktury danych Wykład 3: Stosy, kolejki i listy Dr inż. Paweł Kasprowski pawel@kasprowski.pl Kolejki FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Stos (stack) Dostęp jedynie
Składnia funkcji i Rekurencja w języku Haskell
Składnia funkcji i w języku Haskell Tomasz Ostrowski, Adrian Niechciał, Michał Workiewicz, Marcin Wilk 26 marca 2015 Składnia funkcji i w języku Haskell Spis treści Składnia funkcji Tomasz Ostrowski Adrian
Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0
Słowem wstępu Część rodziny języków XSL Standard: W3C XSLT 1.0-1999 razem XPath 1.0 XSLT 2.0-2007 Trwają prace nad XSLT 3.0 Problem Zakładane przez XML usunięcie danych dotyczących prezentacji pociąga
Kolekcje w Javie cz. 1
Kolekcje w Javie cz. 1 Programowanie obiektowe Jacek Sroka na podstawie materiałów Janusza Jabłonowskiego 8 kwietnia 2013 Po co są kolekcje? Po co są kolekcje? A po co są programy? Żeby manipulować danymi.
Programowanie w języku C++
Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
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
Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.
Operatory w Javie W Javie występują następujące typy operatorów: Arytmetyczne. Inkrementacji/Dekrementacji Przypisania. Porównania. Bitowe. Logiczne. Pozostałe. Operacje wykonywane są na operandach (argumentach
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
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
Polimorfizm, metody wirtualne i klasy abstrakcyjne
Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,
Bloki anonimowe w PL/SQL
Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia
Przeciążenie operatorów
Przeciążenie operatorów W C++ można przeciążyć większość operatory tak, żeby wykonywali zadania, charakterystyczne dla danej klasy Po przeciążeniu odpowiednich operatorów można posługiwać się obiektami
Java: kilka brakujących szczegółów i uniwersalna nadklasa Object
Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów
Wstęp do ruby dla programistów javy
czyli dlaczego java ssie Akademickie Stowarzyszenie Informatyczne 26 lutego 2011 Podstawowe cechy Ruby vs Java Wieloparadygmatowy Imperatywny Typowanie Silne Dynamiczne Otwarte klasy Interpretowany Wszystko
java.util.* :Kolekcje Tomasz Borzyszkowski
java.util.* :Kolekcje Tomasz Borzyszkowski Wstęp Kolekcje w Java dają programiście pewien standardowy sposób radzenia sobie z przetwarzaniem grup obiektów. Implementacja kolekcji w Java składa się z następujących
TYPY GENERYCZNE (GENERICS)
TYPY GENERYCZNE (GENERICS) ZAGADNIENIA: wprowadzenie, konwencje, metody, typy surowe parametry ograniczone podtypy, dziedziczenie, symbole wieloznaczne, ograniczenia. MATERIAŁY: http://docs.oracle.com/javase/tutorial/java/generics/
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
Szablony klas, zastosowanie szablonów w programach
Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do
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
Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303
Wykład 9 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 stos i operacje na stosie odwrotna notacja polska języki oparte na ONP przykłady programów J. Cichoń, P. Kobylański Wstęp
Gramatyki atrybutywne
Gramatyki atrybutywne, część 1 (gramatyki S-atrybutywne Teoria kompilacji Dr inŝ. Janusz Majewski Katedra Informatyki Gramatyki atrybutywne Do przeprowadzenia poprawnego tłumaczenia, oprócz informacji
Metody Kompilacji Wykład 7 Analiza Syntaktyczna
Metody Kompilacji Wykład 7 Analiza Syntaktyczna Parsowanie Parsowanie jest to proces określenia jak ciąg terminali może być generowany przez gramatykę. Włodzimierz Bielecki WI ZUT 2/57 Parsowanie Dla każdej
Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej
Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,
Technologie i usługi internetowe cz. 2
Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,
UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.
UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami
JavaScript funkcyjność
JavaScript funkcyjność WWW 9 kwietnia 2014 Możliwości tworzenia dynamicznych stron WWW HTML i CSS. Skrypty CGI (Perl, PHP). Serwery (django, java). Plug-iny. Ksiażka Większość przykładów pochodzi z ksiażki:
Przygotował: Jacek Sroka. PO* Scala c.d. przygotował Jacek Sroka w oparciu o materiały Martina Oderskiego
1 PO* Scala c.d. przygotował Jacek Sroka w oparciu o materiały Martina Oderskiego 2 Programowanie obiektowe vs programowanie funkcyjne Funkcje są pierwszoplanowym operatorem języka, można je traktować
Wstęp do programowania
Wstęp do programowania Rekurencja, metoda dziel i zwyciężaj Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. VIII Jesień 2014 1 / 27 Rekurencja Recursion See Recursion. P. Daniluk(Wydział
Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)
Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.) przeznaczony do programowania zarówno pod ios jak i Mac OS X bazuje na logice Objective-C bez kompatybilności
Kiedy i czy konieczne?
Bazy Danych Kiedy i czy konieczne? Zastanów się: czy często wykonujesz te same czynności? czy wielokrotnie musisz tworzyć i wypełniać dokumenty do siebie podobne (faktury, oferty, raporty itp.) czy ciągle
PODSTAWY BAZ DANYCH 13. PL/SQL
PODSTAWY BAZ DANYCH 13. PL/SQL 1 Wprowadzenie do języka PL/SQL Język PL/SQL - rozszerzenie SQL o elementy programowania proceduralnego. Możliwość wykorzystywania: zmiennych i stałych, instrukcji sterujących
PARADYGMATY PROGRAMOWANIA Wykład 3
PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na
Dynamiczne struktury danych
Listy Zbiór dynamiczny Zbiór dynamiczny to zbiór wartości pochodzących z pewnego określonego uniwersum, którego zawartość zmienia się w trakcie działania programu. Elementy zbioru dynamicznego musimy co
Lista, Stos, Kolejka, Tablica Asocjacyjna
Lista, Stos, Kolejka, Tablica Asocjacyjna Listy Lista zbiór elementów tego samego typu może dynamicznie zmieniać rozmiar, pozwala na dostęp do poszczególnych elementów Typowo dwie implementacje: tablicowa,
Ada 95 #1/5 - typy. Typy skalarne. Hierarchia typów w Adzie. Typ znakowy. Typy dyskretne. Plan wykładu
Plan wykładu Ada 95 #1/5 - typy Wojciech Complak, Instytut Informatyki, Politechnika Poznańska e-mail : Wojciech.Complak@cs.put.poznan.pl www : http://www.cs.put.poznan.pl/wcomplak Hierarchia typów w Adzie
Visual Basic for Application (VBA)
Visual Basic for Application (VBA) http://dzono4.w.interia.pl Książka Visual Basic dla aplikacji w Office XP PL, autorzy: Edward C. Willett i Steve Cummings, Wyd. Helion Typy zmiennych Różne dane różnie
Właściwości i metody obiektu Comment Właściwości
Właściwości i metody obiektu Comment Właściwości Właściwość Czy można zmieniać Opis Application nie Zwraca nazwę aplikacji, która utworzyła komentarz Author nie Zwraca nazwę osoby, która utworzyła komentarz
Metody Kompilacji Wykład 3
Metody Kompilacji Wykład 3 odbywa się poprzez dołączenie zasad(reguł) lub fragmentów kodu do produkcji w gramatyce. Włodzimierz Bielecki WI ZUT 2 Na przykład, dla produkcji expr -> expr 1 + term możemy
EPI: Interfejs Graficzny 2011/2012 Laboratorium nr 2 Programowanie obiektowe
EPI: Interfejs Graficzny 2011/2012 Laboratorium nr 2 Programowanie obiektowe 9 listopada 2011 Klasa temperatura Funkcjonalności: określanie temeratury w dowolnej skali konwersja temperatury do napisu odczytanie
Programowanie obiektowe
Programowanie obiektowe Język programowania Ruby Marcin Młotkowski 12 kwietnia 2018 Plan wykładu 1 Wstęp 2 Typy numeryczne Łańcuchy znaków (klasa String) Przedziały Tablice i tablice asocjacyjne Nazwy
Wstęp do programowania
wykład 7 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji
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
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 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
Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft );
Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft ); Dobrą praktyką jest używanie wielkich liter jako nazw stałych. Nie jest
Definicje wyższego poziomu
Definicje wyższego poziomu Interpreter Scheme-a nie będzie narzekad w przypadku wystąpienia niezdefionowanej zmiennej w ciele wyrażenia lambda dopóki nie będzie zastosowana Przykład braku informacji o
Podstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
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
Programowanie obiektowe
Programowanie obiektowe Wykład 4 Marcin Młotkowski 15 marca 2018 Plan wykładu 1 2 3 Klasa podstawowa Własne kolekcje Obiekty i wartości Marcin Młotkowski Programowanie obiektowe 141 / 224 Z czego składa