Przygotował: Jacek Sroka. PO* - Scala (typy uogólnione, listy)
|
|
- Karolina Czajkowska
- 7 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)
Bardziej szczegółowoPrzygotował: 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
Bardziej szczegółowoScala + 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ą
Bardziej szczegółowoScala. 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
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoKurs 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
Bardziej szczegółowoWstę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
Bardziej szczegółowoScala. 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...
Bardziej szczegółowoWstę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
Bardziej szczegółowoKurs 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
Bardziej szczegółowoREKURENCJA 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.
Bardziej szczegółowoProgramowanie 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,
Bardziej szczegółowoWstę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
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoInformatyka 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
Bardziej szczegółowoPlatformy 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
Bardziej szczegółowoKurs 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,
Bardziej szczegółowoListy, 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ę
Bardziej szczegółowoPolimorfizm 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
Bardziej szczegółowoLaboratorium 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
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoLaboratorium 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
Bardziej szczegółowoJę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:
Bardziej szczegółowoλ 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:
Bardziej szczegółowoKOTLIN. 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
Bardziej szczegółowoKlasy 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
Bardziej szczegółowoProgramowanie. 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).
Bardziej szczegółowoElementy 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
Bardziej szczegółowoOdczyt 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
Bardziej szczegółowoPodstawy 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
Bardziej szczegółowoSpecyfikacje 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
Bardziej szczegółowoInformatyka 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
Bardziej szczegółowoFP 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
Bardziej szczegółowoKiedy 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,
Bardziej szczegółowoSzablony 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
Bardziej szczegółowoAutomaty 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
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoScala + 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
Bardziej szczegółowoParadygmaty 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
Bardziej szczegółowoJę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/
Bardziej szczegółowoWykł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
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoJę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
Bardziej szczegółowoDawid 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{
Bardziej szczegółowoJę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
Bardziej szczegółowoSystemy 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
Bardziej szczegółowo2. 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
Bardziej szczegółowoPodstawowe 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
Bardziej szczegółowoAbstrakcyjny 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ą
Bardziej szczegółowoWstę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
Bardziej szczegółowoAlgorytmy 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;
Bardziej szczegółowoAlgorytmy 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
Bardziej szczegółowoSkł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
Bardziej szczegółowoSł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
Bardziej szczegółowoKolekcje 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.
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoOperacje 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
Bardziej szczegółowoWstę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
Bardziej szczegółowoObiektowy 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
Bardziej szczegółowoPolimorfizm, 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,
Bardziej szczegółowoBloki 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
Bardziej szczegółowoPrzeciąż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
Bardziej szczegółowoJava: 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
Bardziej szczegółowoWstę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
Bardziej szczegółowojava.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
Bardziej szczegółowoTYPY 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/
Bardziej szczegółowoWstę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
Bardziej szczegółowoSzablony 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
Bardziej szczegółowoDynamiczny 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
Bardziej szczegółowoObliczenia 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
Bardziej szczegółowoGramatyki 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
Bardziej szczegółowoMetody 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
Bardziej szczegółowoInterfejsy. 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,
Bardziej szczegółowoTechnologie 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,
Bardziej szczegółowoUML 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
Bardziej szczegółowoJavaScript 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:
Bardziej szczegółowoPrzygotował: 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ć
Bardziej szczegółowoWstę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ł
Bardziej szczegółowoSwift (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
Bardziej szczegółowoKiedy 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
Bardziej szczegółowoPODSTAWY 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
Bardziej szczegółowoPARADYGMATY 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
Bardziej szczegółowoDynamiczne 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
Bardziej szczegółowoLista, 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,
Bardziej szczegółowoAda 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
Bardziej szczegółowoVisual 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
Bardziej szczegółowoWł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
Bardziej szczegółowoMetody 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
Bardziej szczegółowoEPI: 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
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoWstę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
Bardziej szczegółowoJAVA 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
Bardziej szczegółowoWstę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
Bardziej szczegółowoWykł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
Bardziej szczegółowoStał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
Bardziej szczegółowoDefinicje 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
Bardziej szczegółowoPodstawy 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:
Bardziej szczegółowoWstę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
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowo