JĘZYKI I PARADYGMATY PROGRAMOWANIA PROGRAMOWANIA ZMIENNE, TYPY I PODPROGRAMY

Wielkość: px
Rozpocząć pokaz od strony:

Download "JĘZYKI I PARADYGMATY PROGRAMOWANIA PROGRAMOWANIA ZMIENNE, TYPY I PODPROGRAMY"

Transkrypt

1 JĘZYKI I PARADYGMATY JĘZYKI I PROGRAMOWANIA PARADYGMATY PROGRAMOWANIA ZMIENNE, TYPY I PODPROGRAMY

2 Plan Translatory Zmienne Wiązania Wiązanie typu Wiązanie pamięci Sprawdzanie zgodności typów Języki silnie typowane Jak zdefiniować zgodność typów Zakres widoczności Zakres statyczny Zakres dynamiczny

3 Plan Zakres widoczności, a okres życia Typy Abstrakcyjne typy danych Podprogramy Sposoby przekazywania parametrów

4 Translator Program działający na kodzie źródłowym, którego zadaniem jest przetłumaczenie kodu źródłowego na język zrozumiały dla procesora (wykonawcy programu) Typy translatorów: kompilator asembler interpretator (interpreter)

5 Język kompilowany Język kompilowany: Język, który wymaga kompilatora w celu przekształcenia za jednym zamachem kodu źródłowego (jako całości) zapisanego w języku wysokiego poziomu w wykonywalny kod binarny (krok 1- kompilacja). Program po przetłumaczeniu jest statyczny (tzn. nie może się zmienić) i może być dalej (po konsolidacji- dołączeniu funkcji bibliotecznych) wielokrotnie wykonywany (krok 2) na maszynie docelowej (uruchamiany jest z poziomu systemu operacyjnego) (np. z zastosowaniem różnych danych wejściowych). Języki kompilowalne: np. C++

6 Przykład. Generowanie kodu wynikowego dla pliku hello.c z zastosowaniem kompilatora GNU C and C++ $ gcc -v hello.c -o hello.exe -v - opcja verbose wyświetla komunikaty w czasie kompilacji Plik źródłowy (.c (.cpp).h) Krok 1 Preprocessor (cpp) preprocessing $ cpp hello.c > hello.i Plik wynikowy preprocesora zawierający rozszerzenia pliku źródłowego (.i (.ii)) Krok 2 Kompilator (gcc (g++)) kompilacja $ gcc -S hello.i Kod asemblerowy (.s) Krok 3 Asembler (as) assembly $ as -o hello.o hello.s Kod maszynowy (.o (.obj)) Krok 4 Linker (ld) linkowanie (dołączenie bibliotek statycznych (.lib.a)) $ ld -o hello.exe hello.o...libraries... Kod wynikowy (hello.exe)

7 Język kompilowalny Zalety: najszybszy kod wykonywalny (lepsza optymalizacja kodu dedykowana pod daną architekturę sprzętową) najbardziej kompletny dostęp do systemu operacyjnego do wykonania programu wynikowego nie jest potrzebny kompilator Wady: do kompilacji potrzebny jest kompilator (koszty) relatywnie trudno w nim programować

8 Asembler Język powstał na bazie języków maszynowych danego procesora poprzez zamianę kodów operacji mnemonikami zawiera podstawowe operacje procesora. jedno polecenie asemblera = jeden rozkaz procesora

9 Asembler Zalety: wysoka wydajność kodów wynikowych mały rozmiar kodów wynikowych Zastosowanie: programowanie mikrokontrolerów systemy wbudowane (embedded systems) sterowniki sprzętu

10 Język interpretowany Język, który wymaga interpretatora (tzn. środowiska uruchomieniowego), w którym interpretowany program jest przekształcany w locie z kodu źródłowego do wykonywalnego kodu binarnego podczas każdorazowego jego wykonywania (brak pliku wykonywalnego). Języki interpretowane (nie wymagają kompilacji): np. Ruby

11 Przykład 1. Interpretowanie kodu źródłowego języka Ruby hello.rb $ ruby hello.rb Inna opcja: użycie trybu interaktywnego (Interactive Ruby) (irb) Przykład 2. $ irb >1 + 2 =>3

12 Język interpretowany Zalety: nie wymaga kompilatora łatwiej dokonywać zmian programu łatwiej w nim programować mniejsze zużycie pamięci zewnętrznej (tylko kod źródłowy) możliwość pracy konwersacyjnej (zatrzymanie wykonywania zmiana wartości zmiennych kontynuacja wykonywania) Wady: stosunkowo wolny kod wykonywalny ograniczony dostęp do systemu operacyjnego

13 Języki pseudokodu (P-code) Rodzaj hybrydowych języków używających zarówno kompilacji, jak i interpretacji (patforma uruchomieniowa) Kod źródłowy jest tłumaczony na formę pośrednią- w postaci bajtkodu (pseudokodu) (tzw. P-code) (portable code) (a nie kodu maszynowego). Uruchomienie programu = interpretowanie (tego) pseudokodu Język pseudokodu: np. Java

14 Języki pseudokodu (P-code) Zalety: pseudokod może działać tylko nieznacznie wolniej niż skompilowany plik binarny elastyczność i moc dobrego interpretera

15 C (GCC)- generowanie kodu wynikowego i jego wykonywanie hello.cpp #include <ctime> #include <iostream> using namespace std; int main(){ time_t teraz; time(&teraz); cout << "Hello C++: " << ctime(&teraz) << endl; return 0; } Generowanie kodu wynikowego: g++ -o hello.exe hello.c Wykonanie: hello.exe Output: Hello C++: Wed Mar 20 14:11:

16 Java- generowanie bytecodu i jego interpretowanie platforma uruchmieniowa JVM (Java Virtual Machine). Java compiler (javac) przekształca java code (.java) na JVM Bytecode (.class). % javac plik.java java.class interpreter wykonuje Bytecode. % java plik nie wprowadzamy rozszerzenia.class Output:... Just-In-Time (JIT) compiler przekształca Bytecode na natywny kod maszynowy

17 Java- przykład hello.java import java.io.* public class hello { public static void main(string[] args) { System.out.printf( Hello Java: %tc, new java.util.date()); } } javac hello.java generowanie bytecode java hello interpretowanie bytecode Output: Hello Java: śr mar 20 14:14:23 CET 2013

18 Ruby (irb)- przykład irb(main):001:0> puts "Hello Ruby:" Hello Ruby: => nil irb(main):002:0> Time.now => :20:

19 Architektura von Neumanna Podstawowe elementy architektury von Neumanna: procesor pamięć

20 Abstrakcyjne mechanizmy Zmienne abstrakcja komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np. przydział pamięci) zależność między zmiennymi, a komórkami pamięci może być różna

21 Zmienne, a komórki pamięci Język C char a; int b; float c[100][100]; sizeof(a) 1 bajt sizeof(b) 4 bajty (maszyna 32-bitowa) sizeof(c) bajtów (!)

22 Zmienne 6 atrybutów: nazwa adres wartość typ okres życia zakres widoczności

23 Zmienne Atrybut Nazwa cecha rozmaitych bytów (nie tylko zmiennych) szczegół techniczny, nie mający nic wspólnego z przyjętym paradygmatem programowania jakie znaki są dozwolone w nazwach? tradycyjnie- litery, cyfry, znak podkreślenia znaki z zestawu Unicode- język Ada (2005)) liczba dozwolonych znaków (brak istotnych ograniczeń) rozróżnialność dużych i małych liter (język C)

24 Zmienne Nazwa rozróżnialność dużych i małych liter (język C) Przykład: #include <stdio.h> int main() { char a; int A; printf("size of char: %d\n", sizeof(a)); printf("size of int: %d\n", sizeof(a)); return 0; }

25 Zmienne Nazwa nie każda zmienna ma nazwę: przydzielając dynamicznie pamięć za pomocą operatora new (w języku C++) tworzymy zmienną bez nazwy Przykład (C++) //przyklad braku nazwy zmiennej, nazwa dotyczy wskaznika int *p_var = new int;

26 Zmienne Atrybut Adres (l-wartość) (left value) (a nazwa): program może zawierać dwie różne zmienne o tej samej nazwie, nie mające ze sobą nic wspólnego, np. dwie zmienne lokalne w dwóch różnych podprogramach (funkcjach, procedurach, metodach, itp.)

27 Zmienne Różne zmienne o tej samej nazwie: Przykład (język C) #include <stdio.h> void delta(int a, int b, int c) { int delta = b*b-4*a*c; printf("delta wynosi: %d\n", delta); } void szescian (int a) { int szescian = a*a*a; printf("szescian wynosi: %d\n", szescian); } int main() { delta(5,3,4); szescian(3); return 0; }

28 Zmienne Adres ta sama zmienna lokalna może mieć różne adresy w czasie różnych wywołań tego samego podprogramu

29 Zmienne Różne adresy zmiennej: Przykład (język C) #include <stdio.h> void delta(int a, int b, int c) { int delta = b*b-4*a*c; printf("delta wynosi: %d\n", delta); } void szescian (int a) { int szescian = a*a*a; printf("szescian wynosi: %d\n", szescian); } //wywołanie 1 //wywołanie 2 int main() { delta(5,4,3); szescian(3); delta(7,8,9); return 0; }

30 Zmienne Adres brak jest zatem jednoznacznej odpowiedniości między nazwą, a adresem zmiennej

31 Zmienne Problem aliasowania (ang. aliasing): niekiedy do tej samej komórki pamięci (w tym samym czasie) można dotrzeć za pomocą dwóch różnych nazw, np. gdy dwa wskaźniki ustawimy na ten sam adres. Przykład (język C) int x, *p, *q; p = &x; q = &x; Unikać (niejasność kodu= przyczyna błędów) p q x

32 Zmienne Parametr Wartość (r-wartość) (ang. right value) zawartość komórki pamięci związanej z daną zmienną Przykład (język C) int a = 5;

33 Zmienne Parametr Typ zbiór dopuszczalnych wartości, jakie zmienna może przyjmować Przykład (Język C) char (-128, 127) int (-32768, 32767) (signed by default) (unsigned is optional)

34 Zmienne Typ dla zmiennych w reprezentacji zmiennopozycyjnej, typ określa też precyzję, z jaką liczby są reprezentowane Przykład (Język C) float (3.4 E-38, 3.4 E+38) 7 cyfr precyzji double (1.7 e-308, 1.7 e+308) 15 cyfr precyzji

35 Zmienne Typ z typem wiąże się również zbiór operacji dopuszczalnych dla danej zmiennej Przykład (język C) int a, b=1, c=2; float x, y=1,z=2; a = b / c; //wynik: a=0 x = y / z; //wynik: z =0.5

36 Wiązania Dotyczą różnych bytów i atrybutów, które w pewnym momencie zostają powiązane Byty: zmienna operator podprogram Atrybuty: wartość typ adres

37 Przykłady wiązań Deklaracja zmiennej powoduje związanie zmiennej z typem int a; Wykonanie instrukcji podstawienia powoduje związanie zmiennej z (nową) wartością a = 2;

38 Przykłady wiązań Wiązanie może następować w różnych momentach W czasie projektowania języka programowania jego twórca wiąże znak * (gwiazdka) z operacją mnożenia W czasie projektowania kompilatora języka typ int zostaje związany z zakresem liczb całkowitych dostępnym dla danej maszyny (dla której zaprojektowany jest kompilator)

39 Przykłady wiązań W czasie kompilacji zmienna zostaje związana z zadeklarowanym dla niej typem W czasie ładowania programu do pamięci zmienna statyczna zostaje związana z konkretnym adresem w pamięci W czasie konsolidacji wywołanie funkcji bibliotecznej zostaje związane z kodem tej funkcji W czasie wykonywania programu zmienna lokalna zostaje związana z przydzieloną jej na stosie pamięcią.

40 Przykłady wiązań Przykład (język C) int x; x = x * 2; Typ zmiennej x jest wiązany (z int) w czasie kompilacji. Typ int jest wiązany z konkretnym zakresem liczb całkowitych w czasie projektowania kompilatora. Znak * jest wiązany z konkretnym działaniem arytmetycznym (dopiero) w czasie kompilacji. (nie wcześniej, gdyż konkretne znaczenie gwiazdki zależy od typu operandów (int (mnożenie całkowitoliczbowe) czy float (mnożenie zmiennopozycyjne)?)) Wewnętrzna reprezentacja liczby 2 jest wiązana z pewnym układem bitów w trakcie projektowania kompilatora Wartość zmiennej x jest wiązana z konkretną liczbą w chwili wykonania podstawienia

41 Klasy wiązań Wiązania statyczne następują przed wykonaniem programu i nie zmieniają się w trakcie jego działania. następują w praktyce w czasie kompilacji Wiązania dynamiczne następują w trakcie działania programu. zmieniają się w trakcie działania programu.

42 Wiązanie typu Każda zmienna musi zostać związana z typem przed jej pierwszym użyciem w programie. Praktyczne problemy: Problem 1 Jak określamy typ zmiennej? Problem 2 Kiedy następuje wiązanie? (wiązanie jest statyczne czy dynamiczne?)

43 Jak określamy typ zmiennej? deklaracja jawna (najczęściej spotykane we współczesnych językach) Przykład (język C) int a; deklaracja niejawna (np. pierwsze użycie zmiennej może stanowić deklarację)

44 Jak określamy typ zmiennej? konwencja może określać typ język Fortran- pierwsza litera nazwy wyznacza typ zmiennej (chyba że zmienna została zadeklarowana jawnie) język Perl- pierwszy znak nazwy wyznacza typ zmiennej (np. $foo - zmienna - lista, %foo - tablica haszująca) wnioskowanie o typie z kontekstu użycia (np. język Haskell)

45 Kiedy następuje wiązanie? Deklaracje wymuszają wiązanie statyczne. Przy wiązaniach dynamicznych zmienna jest wiązana z typem przy pierwszym podstawieniu pod nią wartości (PHP, JavaScript) Zaleta: duża elastyczność Wady: trzeba dynamicznie sprawdzać typ (koszty) utrudnienie wykrywania błędów (wynikajacych z niezgodności typów)

46 Koszty dynamicznego wiązania typu Z czego wynikają duże koszty? Zgodność typów musi być sprawdzana dynamicznie (w trakcie wykonywania programu) Efekt: wydłużenie czasu wykonywania programu Z każdą zmienną trzeba przechowywać deskryptor opisujący jej typ Efekt: zwiększenie rozmiaru programu

47 Koszt dynamicznego wiązania typu Operacje na zmiennej są trudniejsze, gdyż wartości różnych typów mogą wymagać zróżnicowanej ilości pamięci i zróżnicowanych działań (rodzaj działań zależy od typu operandów) W praktyce język z dynamicznymi typami musi być interpretowany Powód: w czasie kompilacji nie wiadomo, co będą zawierały zmienne = nie da się wygenerować odpowiedniego kodu

48 Wiązanie pamięci Pojęcia podstawowe: Okres życia zmiennej- czas, w którym jest ona związana z konkretnym miejscem w pamięci. Alokacja pamięci- pobranie bloku pamięci odpowiedniej wielkości z puli wolnej pamięci i związanie go ze zmienną. Dealokacja (zwolnienie) pamięci- unicestwienie wiązania bloku pamięci ze zmienną i oddanie go do puli wolnej pamięci. Okres życia zmiennej- czas pomiędzy alokacją, a dealokacją.

49 Podział zmiennych ze względu na okres życia zmienne statyczne (głównie zmienne globalne) zmienne dynamiczne na stosie (zmienne lokalne) zmienne dynamiczne na stercie, jawne. zmienne dynamiczne na stercie, niejawne

50 Zmienne statyczne Wiązane z miejscem w pamięci przed rozpoczęciem wykonania programu Wiązanie nie zmienia się w trakcie wykonywania programu. Zaleta: efektywne- bezpośrednie adresowanie. Wada: mało elastyczne, takie zmienne nie mogą być używane do obsługi wywołań rekurencyjnych. Przykłady: zmienne globalne zmienne zadeklarowane jako static (w języku C). Uwaga: deklaracja zmiennej z użyciem static wewnątrz definicji klasy w C++ nie oznacza zmiennej statycznej, a zmienną klasową (wspólną dla całej klasy).

51 Zmienne statyczne Przykład (Język C) #include <stdio.h> void f(void){ static int x = 0; // zmienna statyczna int y = 0; x++; y++; printf("x: %d\n",x); printf("y: %d\n",y); } int main() { f(); f(); return 0; } Output: x: 1 y: 1 x: 2 y: 1

52 Zmienne dynamiczne na stosie Wiązane z pamięcią w chwili, gdy wykonanie programu dociera do ich deklaracji. Pamięć przydzielana na stosie (stack). Pamięć zwalniana, gdy kończy się wykonanie bloku zawierającego daną zmienną. Dla typowych zmiennych prostych (całkowite, zmiennopozycyjne) wszystkie atrybuty z wyjątkiem pamięci są wiązane statycznie. Zaleta: Mogą być używane w wywołaniach rekurencyjnych. Wady: Mniejsza efektywność ze względu na pośrednie adresowanie (adres jest wyliczany), narzut związany z alokacją i dealokacją, brak historii (każde wywołanie podprogramu tworzy nową instancję zmiennych). Przykłady: zmienne lokalne w funkcjach (w języku C) i w metodach (w języku C++, Java)

53 Zmienne dynamiczne na stosie Przykład (język C) #include <stdio.h> unsigned int silnia(unsigned int n){ if(n==0){ return 1; }else{ return n*silnia(n-1); } } int main(){ printf("obliczona silnia: %d\n", silnia(3)); return 0; } Output: obliczona silnia: 6

54 Zmienne dynamiczne na stercie, jawne Alokowane przez programistę w trakcie wykonania programu za pomocą jawnych poleceń, np. new (język C++, Java) malloc() (język C). Dealokowane jawnie (za pomocą free() (język C), delete (język C++) lub niejawnie poprzez mechanizm odśmiecania (ang. garbage collector) (język Java, C#). Nie mają nazwy; dostępne są poprzez wskaźnik lub referencję. Zalety: mogą być używane do tworzenia dynamicznych struktur danych (np. list wiązanych i drzew). Wady: niska efektywność z powodu pośredniego trybu adresowania i skomplikowanego zarządzania stertą duże ryzyko błędów

55 Zmienne dynamiczne na stercie, jawne Przykład (język C++) dynamiczne wiązanie pamięci statyczne wiązanie typu int *p; p = new int;... delete p;

56 Zmienne dynamiczne na stercie, niejawne Alokowane i dealokowane niejawnie w trakcie wykonania programu w chwili wykonania podstawienia. Przykład: napisy i tablice w języku Perl. Zaleta: maksymalna elastyczność Wady: wysoki koszt, związany z dynamicznym przechowywaniem atrybutów trudne wykrywanie błędów.

57 Sprawdzanie zgodności typów Podejście ogólne: Podprogramy traktujemy jako operatory, których operandami są parametry. Instrukcję przypisania trakujemy jako operację dwuargumentową, której operandami są lewa i prawa strona przypisania. Sprawdzanie zgodności typów = Sprawdzenie czy typy operandów są odpowiednie. Określenie typ zgodny oznacza: typ bezpośrednio dozwolony w danym kontekście typ, który jest dozwolony po zastosowaniu niejawnej konwersji typu (wykonywanej przez kod wygenerowany przez kompilator) Błąd typu to użycie operatora z operandem nieodpowiedniego typu.

58 Sprawdzanie zgodności typów Przykład niejawnej konwersji typów (język C) float x, y; int j; x = y + j; wartość zmiennej j jest automatycznie zamieniana z typu int na float (kierunek konwersji int float); w związku z tym wykonywane jest dodawanie zmiennopozycyjne;

59 Sprawdzanie zgodności typów Sprawdzanie zgodności typów jest zwykle takie samo jak wiązanie typów: statyczne wiązanie statyczne sprawdzanie dynamiczne wiązanie dynamiczne sprawdzanie Wyjątek: unie (ang. union) przechowują wartości różnych typów w tym samym miejscu pamięci dlatego sprawdzanie pod względem zgodności typów musi być dynamicznie (w trakcie wykonania programu). Przykład (język C) union LiczbaLubZnak { int calkowita; char znak; double rzeczywista; };

60 Języki silnie i słabo typowane Język nazywamy silnie typowanym, jeśli błędy typu są w nim zawsze wykrywane. Zaleta: możliwość wykrywania wielu pospolitych błędów. Języki prawie silnie typowane mają możliwość wykonania jawnej konwersji typów (rzutowanie typów) Przykłady: Java, C#, Ada Przykład jawnej konwersji typów (język Java) int a = 5; double b = 13.5; int c = (int)b/a;

61 Języki silnie i słabo typowane Języki C i C++ nie są silnie typowane (np. można uniknąć sprawdzania typów parametrów) Języki słabo typowane oferują niejawne konwersje typów ukryte przed programistą Przykład niejawnej konwersji typów (język PHP) php > echo "45" + 12; Output: 57

62 Silne typowanie, a niejawne konwersje Silne typowanie chcemy mieć po to, by wykrywać jak najwięcej błędów. Występowanie w języku niejawnych konwersji osłabia sens silnego typowania. Powód: niejawne konwersje powodują, że np. błędne podstawienia mogą formalnie przestać być błędami typu. Silne typowanie bez konwersji sprzyja niezawodności (kosztem wygody programisty). Przykład: zasady niejawnych konwersji sprawiają, że sprawdzanie zgodności typów w języku Ada jest bardziej skuteczne niż w języku Java, a to z kolei jest bardziej skuteczne niż w języku C++.

63 Silne typowanie, a przeciążenie Przeciażanie operatorów, funkcji, metod pozwala kompilatorowi/interpretatorowi dobierać operacje w zależności od kontekstu użycia Przykład (Język Python) >>> # dodawanie calkowitoliczbowe >>> >>> # dodawanie zmiennopozycyjne >>> >>> # laczenie napisow >>> "2" + "3" '23' >>> '2' + '3' '23'

64 Jak zdefiniować zgodność typów? Rodzaje zgodności typów zgodność nazwy zgodność struktury (opisu)

65 Zgodność nazwy dwie zmienne uznajemy za zgodne co do typu, jeśli zostały zdefiniowane w tej samej deklaracji lub jeśli do ich zadeklarowania użyto tej samej nazwy typu. Zdefiniowanie zgodności typów poprzez zgodność nazwy jest łatwiejsze w implementacji, ale bardzo restrykcyjne, wrażliwe na błędy Przykład zgodności nazwy (Język C) typedef float mile ; typedef float jardy ; Typ mile jest zgodny z typem jardy Przykład zgodności nazwy (Język Ada) type mile is new Float ; type jardy is new Float; Typ mile nie jest zgodny z typem jardy

66 Zgodność struktury dwie zmienne uznajemy za zgodne co do typu, jeśli mają taką samą strukturę W tym przypadku potrzebne są doprecyzowania Czy struktury struct o takiej samej strukturze, ale innych nazwach pól, są zgodne? Czy tablice o takim samym typie elementów są zgodne, jeśli jedna ma zakres indeksów 0..99, a druga ? Zdefiniowanie zgodności typów poprzez zgodność struktury jest elastyczne, ale trudniejsze w implementacji Aby rozróżnić typy o takiej samej strukturze należy zastosować mechanizm: podtypów typów pochodnych.

67 Typy pochodne Typ pochodny (ang. derived type) Nowy typ oparty na typie już istniejącym. Dziedziczy wszystkie własności typu bazowego. De facto to kopia typu utworzona pod inną nazwą. Nie jest zgodny z typem bazowym- pozwala to na konstruowanie typów identycznych co do struktury, ale niezgodnych z typem bazowym.

68 Typy pochodne Przykład (język Ada) Chcemy liczyć jabłka i pomarańcze type Apples is new Integer; type Oranges is new Integer;... No_Of_Apples : Apples; No_Of_Oranges : Oranges; Obydwa typy dziedziczą operacje dodawania po typie Integer: No_Of_Apples := No_Of_Apples + 1; No_Of_Oranges := No_Of_Oranges + 1;

69 Podtypy Podtyp (ang.subtype) jakiegoś typu to jego podzbiór (w sensie matematycznym) Z założenia jest zgodny z typem bazowym Przykład podtypów (język VHDL) subtype Natural is Integer range 0 to Integer'high; subtype Positive is Integer range 1 to Integer'high;

70 Zakres widoczności atrybut, np. zmiennej Zakres widoczności to obszar kodu programu (niekoniecznie ciągły), w którym można się do danej zmiennej odwołać (tzn. użyć jej). Zakres widoczności nie wolno mylić z okresem życia (kolejny atrybut) Okres życia to pojęcie związane z czasem (czasem działania programu) Zakres widoczności to pojęcie związane z przestrzenią (obszarem kodu programu)

71 Lokalność zmiennej Pojęcia związane z zakresem widoczności: Zmienna lokalna (względem danego fragmentu kodu, podprogramu, itp.) to zmienna zadeklarowana w danym bloku, jednostce programu, itp. Zmienna nielokalna (także względem danego fragmentu kodu, podprogramu, itp.) to zmienna widoczna w danej jednostce, ale zadeklarowana gdzie indziej. Zmienna globalna to zmienna widoczna w całym programie (z wyjątkiem przypadku jej przesłonięcia).

72 Zakres widoczności statyczny (leksykalny) MAIN P1 P2 dynamiczny MAIN P2 P1 W obydwu przypadkach możliwe jest przesłanianie nazw.

73 Zakres statyczny widoczności Dotyczy m.in. języków kompilowalnych (np. C, C++) i innych np. Java, Ruby. Opiera się na kodzie źródłowym programu (w sensie przestrzennym). W przypadku języków kompilowalnych ustalany jest w czasie kompilacji (szybsze, mniej elastyczne). Zakładamy, że wszystkie zakresy są związane z jednostkami programu i że rozstrzyganie zakresu jest jedyną metodą odwołania się do zmiennych nielokalnych. Uwaga! Nie zawsze jest to obowiązujące Przykład (język C++). Operator zasięgu(::) pozwala na dostęp do niewidocznej zmiennej.

74 Zakres statyczny Odwoływanie się do zmiennych Napotkawszy odwołanie do zmiennej kompilator musi odnaleźć jej deklarację i określic jej atrybuty. Deklaracji szuka się najpierw w bieżącej jednostce programu. Jeśli tu jej nie ma, szuka się w jednostce ją okalającej (w tzw. poprzedniku statycznym). Jeśli i tu jej nie ma, trzeba szukać w poprzedniku poprzednika itd. (czyli w przodkach statycznych), być może docierając aż do zakresu globalnego czyli do programu głównego. Zmienne mogą się przesłaniać. Jeśli w bliższym przodku statycznym jest zadeklarowana zmienna o takiej samej nazwie, jak w dalszym przodku, to przesłania ona tę dalszą.

75 Zakres statyczny Dostęp do przesłoniętych zmiennych Język może oferować mechanizmy pozwalające na dostęp do przesłoniętych zmiennych. Przykład (język C++) Operator zasięgu (::) np. ::somevariable

76 Zakres statyczny Bloki Język może oferować mechanizmy pozwalające na dostęp do przesłoniętych zmiennych. Przykład 1 (języki C i C++) Można zadeklarować zmienną na początku dowolnego bloku wyznaczonego przez nawiasy klamrowe. f() { int a;... }

77 Zakres statyczny Bloki Przykład 2 (języki C++, Java i C#) Można zadeklarować zmienną w instrukcji pętli for: for(int i = 0; i<n; i++){ a[i] = 0; } Zakresem widoczności dla zmiennych z przykladu 1 oraz 2 jest rozważany blok: od { do }

78 Zakres statyczny Bloki Tak zadeklarowane zmienne (Przykład 1 oraz 2) są to zmienne dynamiczne alokowane na stosie. Pamięć jest alokowana za każdym razem przy wejściu do bloku, a dealokowana przy wyjściu z niego.

79 Zakres statyczny Przykład (Język C++) int z =3; // z jest zmienną globalną (zewnętrzną); void f() { float b = 2; /* b jest zm. lokalną (automatyczną) widoczną jedynie w funkcji f */ b = b + z; // b jest tutaj równe 5; } void g() { int z =10; // ta deklaracja przesłoniła z globalne int d = 2; d = d + z; // d jest tutaj równe 12 (2 + 10) d = d + b; /* kompilator w tym miejscu wskaże błąd; b nie jest widoczne w funkcji g.*/ d = z + ::z; /*tutaj d = 13 (10 + 3); operator :: powoduje, że zostanie odczytana globalna zmienna z, która jest przesłonięta przez lokalną zmienną z.*/ }

80 Zakres statyczny Zagnieżdżone definicje procedur (problem) P0 { } //zakres globalny P1 { P3 { } P4 { /*problem jeżeli P4 potrzebuje } odwołać się do danych z zakresu } P2; jeśli przeniesiemy P4 do P2 { wnętrza P2 nie bedzie możliwe P5 { wywołanie P4 przez P1*/ } }

81 Zakres dynamiczny Ustalany jest w czasie wykonywania programu. Przykład: język Clojure (poprzez mechanizm wiązań (binding), ale jest wybór (let)). Opiera się na kolejności wywołań podprogramów, a nie na ich rozmieszczeniu przestrzennym. Jako kryterium rozstrzygania o dostępie przyjmujemy bliskość czasową (a nie bliskość przestrzenną).

82 Zakres dynamiczny Odwoływanie się do zmiennych Przy napotkaniu odwołania do zmiennej kompilator musi odnaleźć jej deklarację i określić jej atrybuty. Deklaracji szuka się najpierw w bieżącym podprogramie (podobnie jak dla zakresu statycznego). Jeśli tu jej nie ma, trzeba szukać w podprogramie, który wywołał bieżący podprogram (w tak zwanym poprzednikiem dynamicznym). Jeśli i tu jej nie ma, trzeba szukać w poprzedniku poprzednika itd. (czyli w przodkach dynamicznych), być może docierając aż do zakresu globalnego czyli do programu głównego. Zmienne mogą się przesłaniać. Jeśli w bliższym przodku dynamicznym jest zadeklarowana zmienna o takiej samej nazwie, jak w dalszym przodku, to przesłania ona tę dalszą.

83 Zakres dynamiczny Zagnieżdżone definicje procedur (problem) P0() { int x; P1() { int x; P2(); } P2() { Put(x); /*odwołanie do zmiennej x } w wywołaniu Put(x)odnosi się do zmiennej zadeklarowanej w P1 P1(); (P1 jest poprzednikiem dynamicznym dla P2). } Gdyby język stosował zakresy statyczne, to to samo odwołanie odnosiłoby się do zmiennej zadeklarowanej w P0*/

84 Zakres statyczny vs. zakres dynamiczny 01 const int b = 5; 02 int foo() 03 { 04 int a = b + 5; 05 return a; 06 } int bar() 09 { 10 int b = 2; 11 return foo(); 12 } int main() 15 { 16 foo(); // returns bar(); // returns return 0; 19 } 01 const int b = 5; 02 int foo() 03 { 04 int a = b + 5; 05 return a; 06 } int bar() 09 { 10 int b = 2; 11 return foo(); 12 } int main() 15 { 16 foo(); // returns bar(); // returns 7 18 return 0; 19 }

85 Wady zakresów Zakres statyczny: nadużywanie zmiennych globalnych Zakres dynamiczny: gorsza efektywność (rozstrzyganie zakresu musi być robione dynamicznie) nie da się statycznie sprawdzić zgodności typów dla zmiennych nielokalnych słaba przejrzystość programu słaba czytelność odwołań podprogramy są wykonywane w środowisku wcześniej wywołanych podprogramów, które jeszcze nie zakończyły działania. wniosek: pomiędzy rozpoczęciem a zakończeniem działania podprogramu jego lokalne zmienne są widoczne dla innych podprogramów, niezależnie od ich bliskości przestrzennej.

86 Zakres widoczności, a okres życia Przypadek 1 (pojęcia bardzo bliskie) Język Java: public void example() { //x,y,z są niewidoczne int x; //x jest widoczna for ( int y = 1 ; y < 10 ; y++ ) { //x,y są widoczne int z; //x,y,z są widoczne } //x jest widoczna } Zmienna jest zadeklarowana w metodzie, która nie wywołuje innych metod. Jej zakres widoczności rozciąga się od deklaracji do końca bloku. Jej okres życia zaczyna się przy wejściu do metody i kończy się w chwili, gdy kończy się wykonanie metody.

87 Zakres widoczności, a okres życia Przypadek 2 (pojęcia rozbieżne) Język C #include <stdio.h> void foo() { int a = 10; static int sa = 10; a += 5; sa += 5; printf("a = %d, sa = %d\n", a, sa); } int main() { int i; for (i = 0; i < 5; ++i) foo(); } Output: a = 15, sa = 15 a = 15, sa = 20 a = 15, sa = 25 a = 15, sa = 30 a = 15, sa = 35 Zmienna zadeklarowana jako static wewnątrz funkcji ma lokalny zakres widoczności ale globalny okres życia.

88 Inne problemy związane ze zmiennymi Środowisko odwołań Zbiór wszystkich zmiennych widocznych w danym punkcie programu nazywamy środowiskiem odwołań tego punktu. W języku z zakresami statycznymi środowisko tworzą wszystkie zmienne zadeklarowane lokalnie wraz ze zmiennymi z przodków statycznych, z wyjątkiem zmiennych przesłoniętych. W języku z zakresami dynamicznymi środowisko tworzą wszystkie zmienne zadeklarowane lokalnie wraz ze zmiennymi z aktywnych (aktualnie wykonywanych) podprogramów, z wyjątkiem zmiennych przesłoniętych.

89 Inne problemy związane ze zmiennymi Stałe Stała nazwana to zmienna, która jest wiązana z wartością tylko raz w chwili wiązania z pamięcią. Przykład (język C) const int x=4; #define x 4; Zalety: polepszenie czytelności kodu i ułatwienie modyfikowania programu. Uwaga! #define nie jest częścią języka programowania (preprocesor vs kompilator)

90 Inne problemy związane ze zmiennymi Inicjowanie zmiennych Wiązanie zmiennej z wartością w chwili, gdy jest ona wiązana z pamięcią nazywane jest inicjalizacją (podobnie jak w przypadku nazwanej stałej, ale wartość zmiennej może się zmieniać). Jeśli alokacja jest statyczna to inicjalizacja jest jednokrotna. Jeśli alokacja jest dynamiczna to inicjalizacja jest wielkrotna (podczas każdej alokacji). W wielu językach inicjalizacji można dokonać przy deklaracji zmiennej Przykład (języki C, C++, Java, C#) int y=4;

91 Typ Formalnie to ustalony zbiór dopuszczalnych wartości jakie dana może przyjmować. Typ matematyczny zbiór skończony (z uwagi na ograniczoną wielkość pamięci-python lub zdefiniowany zakres- C++, Java). Wyznacza zbiór operacji dopuszczalnych na danej. Technicznie ustala reprezentację danej w pamięci komputera. W konsekwencji ustala sposób traktowania danej przez kompilator lub interpretator. Oferuje dodatkowe narzędzie abstrakcji (w stosunku do zmiennych).

92 Typ Aspekty wykorzystania typów: sprawdzanie zgodności typów kompilator lub interpretator może kontrolować czy odpowiednie dane są użyte w odpowiednim kontekście, nie pozwalając na operacje nie zdefiniowane w języku np. Język C Przykład 1 Przykład 2 char ch = 'A'; char ch = "A"; /* błąd */ const char * st = 'A'; /* błąd*/ const char * st = "A";

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np.

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np. ZMIENNE 39 zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np. przydział pamięci). 40 Nazewnictwo zmiennych Dozwolone

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Java EE produkcja oprogramowania

Java EE produkcja oprogramowania Java EE produkcja oprogramowania PPJ PODSTAWY PROGRAMOWANIA W JAVIE PODSTAWY JĘZYKA JAVA 1 Warszawa, 2016Z 2 Ogólna charakterystyka języka Java 3 Java 1/2 Język programowania Java został opracowany przez

Bardziej szczegółowo

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE

Bardziej szczegółowo

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24 Wymagania proceduralnych języków wysokiego poziomu ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH modele programowe procesorów ASK MP.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad.

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

Bardziej szczegółowo

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 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ółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

Bardziej szczegółowo

Wstęp do programowania obiektowego, wykład 7

Wstęp do programowania obiektowego, wykład 7 Wstęp do programowania obiektowego, wykład 7 Klasy i funkcje abstrakcyjne Przeciążanie funkcji Definiowanie i interpretacja złożonych typów danych w C++ Wskaźniki do funkcji 1 KLASA ABSTRAKCYJNA 2 Klasa

Bardziej szczegółowo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

Zmienne, stałe i operatory

Zmienne, stałe i operatory Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe

Bardziej szczegółowo

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Tablice wielowymiarowe C umożliwia definiowanie tablic wielowymiarowych najczęściej stosowane

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

Język C++ Różnice między C a C++

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Bardziej szczegółowo

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: Wskaźniki nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja

Bardziej szczegółowo

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17 Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8

Bardziej szczegółowo

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Wskaźniki. Informatyka

Wskaźniki. Informatyka Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą

Bardziej szczegółowo

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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,

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom). Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154

Bardziej szczegółowo

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO Rozdział 1. Wybór i instalacja kompilatora języka Pascal 1.1. Współczesne wersje kompilatorów Pascala 1.2. Jak zainstalować

Bardziej szczegółowo

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor

Bardziej szczegółowo

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania wykład 2 Piotr Cybula Wydział Matematyki i Informatyki UŁ 2012/2013 http://www.math.uni.lodz.pl/~cybula Język programowania Każdy język ma swoją składnię: słowa kluczowe instrukcje

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Metodyka i Technika Programowania 1

Metodyka i Technika Programowania 1 Metodyka i Technika Programowania 1 Pytania zaliczeniowe z wykładu mgr inż. Leszek Ciopiński Wykład I 1. Wprowadzenie 1.1. Programowanie imperatywne polega na: 1.2. Czy w programowaniu imperatywnym programista

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

Przeciążanie operatorów

Przeciążanie operatorów Instrukcja laboratoryjna nr 4 Programowanie w języku C 2 (C++ poziom zaawansowany) Przeciążanie operatorów dr inż. Wilk-Jakubowski Jacek mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz Wprowadzenie Oprócz

Bardziej szczegółowo

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

Bardziej szczegółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

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

Bardziej szczegółowo

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1 Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).

Bardziej szczegółowo

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017 Tematyka

Bardziej szczegółowo

Programowanie w elektronice: Podstawy C

Programowanie w elektronice: Podstawy C Programowanie w elektronice: Podstawy C Projekt Matematyka dla Ciekawych Świata, Robert Ryszard Paciorek 2019-05-05 C / C++ są najpopularniejszymi językami kompilowanymi do kodu maszynowego

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

MATERIAŁY DO ZAJĘĆ II

MATERIAŁY DO ZAJĘĆ II MATERIAŁY DO ZAJĘĆ II Zmienne w C# Spis treści I. Definicja zmiennej II. Hierarchia typów (CTS) III. Typy wbudowane IV. Deklaracja zmiennych V. Literały VI. Pobieranie i wypisywanie wartości zmiennych

Bardziej szczegółowo

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

Bardziej szczegółowo

tablica: dane_liczbowe

tablica: dane_liczbowe TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

Funkcja (podprogram) void

Funkcja (podprogram) void Funkcje Co to jest funkcja? Budowa funkcji Deklaracja, definicja i wywołanie funkcji Przykłady funkcji definiowanych przez programistę Przekazywanie argumentów do funkcji Tablica jako argument funkcji

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

Bardziej szczegółowo

Wstęp do programowania. Wykład 1

Wstęp do programowania. Wykład 1 Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.

Bardziej szczegółowo

1 Atrybuty i metody klasowe

1 Atrybuty i metody klasowe 1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich

Bardziej szczegółowo

Wstęp do programowania

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

Bardziej szczegółowo

Paradygmaty programowania

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

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

Wskaźniki w C. Anna Gogolińska

Wskaźniki w C. Anna Gogolińska Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

KURS C/C++ WYKŁAD 6. Wskaźniki

KURS C/C++ WYKŁAD 6. Wskaźniki Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo

Programowanie 2. Język C++. Wykład 3.

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez

Bardziej szczegółowo

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski

Bardziej szczegółowo

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop. 2010 Spis treści Wstęp 11 Część I PASCAL - wprowadzenie do programowania strukturalnego

Bardziej szczegółowo

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2) Podstawy programowania (język C) Globalne / Lokalne Wykład 15. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Zmienne globalne / lokalne (1) int A, *Q; // definicja zmiennych globalnych

Bardziej szczegółowo

Definicje klas i obiektów. Tomasz Borzyszkowski

Definicje klas i obiektów. Tomasz Borzyszkowski Definicje klas i obiektów Tomasz Borzyszkowski Podstawy Do tej pory używaliśmy klas jedynie po to, by zdefiniować metodę main(). Klasy mają znacznie szersze zastosowanie w Java. W OOP (także w Java) klasy

Bardziej szczegółowo

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

Szablony funkcji i szablony klas

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

Bardziej szczegółowo

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h> Szablon programu: /* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include /* opcjonalne: deklaracja typów o rozmiarze jednego i dwóch

Bardziej szczegółowo

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

Wstęp do wskaźników w języku ANSI C

Wstęp do wskaźników w języku ANSI C Wstęp do wskaźników w języku ANSI C / Materiał dydaktyczny pomocniczy do przedmiotu Informatyka sem.iii kier. Elektrotechnika/ 1. Wprowadzenie W języku ANSI C dla każdego typu X (wbudowanego, pochodnego,

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 2

Języki i techniki programowania Ćwiczenia 2 Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...

Bardziej szczegółowo

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania

Bardziej szczegółowo

Język C++ zajęcia nr 2

Język C++ zajęcia nr 2 Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Tworzenie aplikacji w języku Java

Tworzenie aplikacji w języku Java Tworzenie aplikacji w języku Java Wykład 1 Piotr Czapiewski Wydział Informatyki ZUT 2 października 2009 Piotr Czapiewski (Wydział Informatyki ZUT) Tworzenie aplikacji w języku Java 2 października 2009

Bardziej szczegółowo

Podstawy programowania w języku C

Podstawy programowania w języku C Podstawy programowania w języku C WYKŁAD 1 Proces tworzenia i uruchamiania programów Algorytm, program Algorytm przepis postępowania prowadzący do rozwiązania określonego zadania. Program zapis algorytmu

Bardziej szczegółowo

Microsoft IT Academy kurs programowania

Microsoft IT Academy kurs programowania Microsoft IT Academy kurs programowania Podstawy języka C# Maciej Hawryluk Język C# Język zarządzany (managed language) Kompilacja do języka pośredniego (Intermediate Language) Kompilacja do kodu maszynowego

Bardziej szczegółowo