Języki i paradygmaty programowania – skrót
Paradygmat – wzorzec
Paradygmat programowania – zbiór koncepcji reprezentujących podejście do implementacji algorytmu, zbiór mechanizmów programistycznych wykorzystywany przez programistę i mający wpływa na wykonywanie programu przez komputer, ogół oczekiwań wobec języka programowania i komputera
Język programowania – język formalny służący do komunikacji użytkownika z komputerem (wydawania poleceń), składających się z określonych słów kluczowych i symboli
Język programowania jest definiowany przez syntaktykę i semantykę, czyli reguły określające jakie wyrażenia się stosuje i jakie jest są ich funkcje.
Syntaktyka to składnia, określa jak się tworzy polecenia, jak wyglądają struktury sterowania i deklaracje
Język to zbiór napisów ze znaków danego alfabetu
Do opisu składni języków wykorzystuje się gramatyki bezkontekstowe, zazwyczaj też notację (E)BNF
pętla-dopóki ::= "while" "(" wyrażenie ")" instrukcja
Semantyka – znaczenie form, czyli co one robią
Występuje 5 generacji języków programowania, w zależności od stopnia ich złożoności
Programowanie imperatywne – ciąg poleceń dla komputera wykonywanych jedno po drugim sekwencyjnie
Abstrakcją komórek pamięci są zmienne.
Programowanie proceduralne – podział zadania na podzadania i ich niezależna implementacja
Programowanie strukturalne – używanie prostych struktur, unikanie skoków
Programowanie obiektowe – połączenie danych i operacji na nich w całość – obiekty, kolejne cechy to dziedziczenie, inkapsulacja, polimorfizm, wysoki stopień abstrakcji danych
Programowanie funkcyjne – program to złożona funkcja matematyczna, brak pętli, zmiennych, brak stanu maszyny, programy to składane funkcje, zazwyczaj istotne wykorzystanie rekurencji, wynikami funkcji mogą być funkcje
Programowanie logiczne – podstawową koncepcją są predykaty, czyli coś co trzeba udowodnić, wykonanie programu to próba udowodnienia w oparciu o przesłanki
Paradygmat programowania równoległego i rozproszonego – rozdział procesu na wiele procesorów/maszyn dodanie mechanizmów synchronizacji i współdzielenia
Programowanie skalarne/wektorowe – operacje na zmiennych skalarnych/macierzach
Programowanie zdarzeniowe
Programowanie aspektowe
Wzorce projektowe – opisują najczęstsze problemy i ich rozwiązania
Wzorce konstrukcyjne – informują o najlepszych metodach uzyskiwania instancji obiektów
Wzorce strukturalne – opisują sposoby łączenia klas/obiektów
Wzorce czynnościowe – definiują komunikację pomiędzy obiektami oraz kontrolują przepływ danych
Uml – język modelowania rzeczywistości, diagramu UML ułatwiają i ujednolicają sposób komunikachi pomiędzy współtwórcami systemu, niezależne od języka i platformy
Diagramy struktury – statyczna część ssytemu
Diagramy zachowania – dynamiczna część systemu
Translator – program umożliwiający wykonanie programu w języku innym niż maszynowy, tj. kompilator i interpreter
Język pseudokodu – język używający zarówno kompilacji jak i interpretacji, kod tłumaczony jest na pseudokod (forma binarna), np. Java
Zmienna ma 6 atrybutów:
· Nazwę
· Adres (l-wartość)
· Wartość (r-wartość)
· Typ (zbiór dopuszczalnych wartości, wiążą się z nim również operacje)
· Okres życia
· Zakres widoczności
Wiązanie – połączenie zmiennej z którymś atrybutem (jego wartością)
Wiązanie statyczne – następuje przed wykonaniem programu, zazwyczaj w trakcie kompilacji
Wiązanie dynamiczne – następuje w trakcie działania programu, może się zmieniać w trakcie działania programu
Typ zmiennej jest zazwyczaj deklarowany jawnie, może być też niejawnie, np. poprzez wnioskowanie, pierwsze użycie lub na podstawie nazwy (pierwsza litera).
Zgodność typów jest sprawdzana dynamicznie
Alokacja pamięci – pobranie bloku pamięci i związanie ze zmienną
Dealokacja – zwolnienie bloku pamięci
Okres życia zmiennej – czas pomiędzy alokacją, a dealokacją
Zmienne dynamiczne na stosie – zmienne które są wiązane z pamięcią w momencie napotkania na ich deklarację
Zmienne dynamiczne na stercie, jawne – alokowane przez programistę poprzez malloc/New, dealokowane jawnie lub poprzez mechanizm odświecania, bez nazwy, dostępne poprzez referencję/wskaźnik
Zmienne dynamiczne na stercie, niejawne – alokowane/dealokowane przy podstawianiu
Zakres widoczności zmiennej – obszar kodu, której można się odwołać do zmiennej
Zakres widoczności != okres życia
Zmienna lokalna – zmienna zadeklarowana w danym fragmencie kodu
Zmienna nielokalna – zmienna widoczna w danej jednostce, ale zadeklarowana poza nią
Zmienna globalna – zmienna widoczna w całym programie
Zakres statyczny widoczności – opiera się na kodzie źródłowym, kompilator szuka w obrębie jednostki, jeśli nie ma to w jednostce wyższej itd., zmienne mogą się przesłaniać
Zakres dynamiczny widoczności – opiera się na przebiegu wykonania programu, przy napotkaniu odwołania szukana jest deklracja na podstawie ostatnio wykonywanych bloków, szukanie jest w jednostce, jeśli brak to w jednostce która ją wywołała, zmienne mogą się przesłaniać
Typ – zbiór dopuszczalnych wartości, z typem wiąże się zbiór operacji dopuszczalnych
Zgodność typów – typy operandów muszą się zgadzać z typami wymaganymi przez operatory
Dla unii sprawdzanie zgodności tylko dynamiczne, w pozostałych przypadkach sprawdzanie takie jak rodzaj wiązania
Języki słabo typowane – oferują niejawne konwersje typów
Języki silnie typowane – wychwytują różnice typów – błędy typów
Zgodność nazwy typu – dwie zmienne są zgodne, jeśli w deklaracji użyto tej samej nazwy typu
Zgodność struktury – 2 zmienne są zgodne, jeśli mają taką samą strukturę (budowę)
Mechanizm podtypów – dany typ ma podtypy zgodne z typem nadrzędnym i innymi podtypami
Mechanizm typów pochodnych – typów będących niezależnymi, niezgodnymi typami
Typ pierwotny – typ którego nie da się zdefiniować za pomocą innych
Typ prosty – składający się z jednego typu pierwotnego
Typ złożony – typ składający się z wielu typów prostych
Rekord/struktura – iloczyn kartezjański typów składowych
Tablica – iloczyn kartezjański egzemplarzy tego samego typu
Ty wyliczeniowy – typ zawierający uporządkowany zbiór wskazanych elementów
Podtyp – to podzbiór typu
Typ pochodny – ten sam zbiór ale o innej nazwie
Typ abstrakcyjny – konstrukcja, której definiowany jest typ oraz operacje na nim, ważne jest oddzielenie części prywatnej (implementacji) od publicznej (interfejsu) – inkapsulacja
Typy napisowe – pierwotne/tablicowe/specjalne tablicowe, mogą być o stałej długości, zmiennej o stałym ograniczeniu, zmienne dowolnie (stałe to takie, że nie można zmieniać długości)
Typy tablicowe – zestaw elementów tego samego typu, dostęp przez indeksowanie (wyliczanie adresu), wymiar może być stały statyczny, stały dynamiczny oraz zmienny dynamiczny
Typ asocjacyjny – zbiór par uporządkowanych (klucz, wartość), dynamiczne
Rekord/struktura – zestaw elementów różnych typów
Unie – zestaw pól różnych typów z fizycznym przechowywaniem tylko jednego
Typ wskaźnikowy – obejmuje wartości wskazujące na inne wartości, technicznie adresy w pamięci
Podprogram – abstrakcja czynności, część programu wykonująca daną funkcję
Definicja podprogramu – sposób komunikowania się z otoczeniem oraz sposób działania
Nagłówek podprogramu – mówi o tym, że fragment kodu po nim jest definicją, przez podanie nazwy i parametrów mówi o sposobie komunikowania się
Sygnatura podprogramu – jest to liczba, porządek i typ parametrów formalnych
Protokół podprogramu – opis parametrów formalnych i typ wyniku
Deklaracja/prototyp podprogramu – określenie protokołu bez podania definicji
Parametry formalne – parametry w nagłówku
Parametry aktualne – parametry przy wywołaniu
Procedury, a funkcje – procedury definiują nowe instrukcje, a funkcje nowe operatory
Zgodność typów parametrów nie jest sprawdzana przez JavaScript, Perl i PHP, w C/C++ można wymusić brak sprawdzania zgodności poprzez stworzenie nagłówka z wielokropkiem.
Parametry mogą być w trybach: in, out, in-out (pobieranie i wyprowadzanie danych)
Przekazywanie danych:
· Poprzez wartość (operacja na kopii)
· Pośrednio, np. przez wskaźnik (operacja na oryginalnych danych)
Implementacja przekazywania danych:
· Przez wartość
· Przez wynik (przed wyjściem wartość jest przesyłana do parametru aktualnego z formalnego)
· Przez wartość i wynik
· Przez referencję
· Przez nazwę (parametr aktualny jest wstawiany tekstowo w miejsce parametru formalnego)
· Przez zmienną (może znaczyć przez referencję, może przez nazwę, niejednoznaczne)
W Perl wszystkie parametry aktualne są umieszczane w predefiniowanej tablicy @_
Podprogramy mogą być parametrami
Wiązanie płytkie – jeśli wykonywany podprogram będzie używał środowiska instrukcji wywołującej podprogram
Wiązanie głębokie – jeśli podprogram będzie używał własnego środowiska
Wiązanie ad hoc – jeśli podprogram będzie używał środowiska instrukcji która przekazała podprogram jako parametr
Polimorfizm podprogramów – kilka wersji danego podprogramu, różniących się sygnaturami
W programowaniu obiektowym występuje dynamiczne wiązanie wywołań metod z ich definicjami
Podklasa – klasa zdefiniowana przez dziedziczenei z innej klasy
Metoda – podprogram na obiektach klasy
Komunikaty – odwołania do metod
Protokół komunikatów obiektu – zbiór wszystkich metod danego obiektu
Obiektówka by Homer:
Pojęcie obiektu, od strony naukowej:
-Obiekt jest abstrakcją czegoś w dziedzinie problemu, odzwierciedlającą zdolność systemu do przechowywania informacji o tym, interakcji z tym czymś lub obie te rzeczy.
-Obiekt to kapsułka z wartościami atrybutów i wyłącznie na nich działającymi usługami.
Rózniaca między widzeniem obiektowym a proceduralnym:
Obiektowe
Proceduralne
-Projektant wychodzi od obiektów i problemów świata rzeczywistego starając się użyć dostępnych środków informatycznych w celu ich odwzorowania. Inżynieria wiedzy.
Możliwości maszyny i języka programowania są nadrzędne w stosunku do dokładnego uchwycenia istoty problemu. Inżynieria kodu
-Dziedziczenie klas pozwala na naturalną generalizację (specjalizację) pojęć.
-Brak mechanizmów pozwalających na generalizację (specjalizację)
-Systemy są elastyczne, podatne na rozszerzenia i zmiany dzięki hermetyzacji, dziedziczeniu i polimorfizmowi
-Brak naturalnych mechanizmów wspierających zmiany i rozszerzenia
-Ponowne użycie jest podstawowym mechanizmem tworzenia nowych rozwiązań
-Każdorazowo znaczące części systemu tworzone są od podstaw
-Towarzyszące obiektom technologie komponentów rozszerzają możliwości ponownego użycia i modularnej budowy systemu
-Biblioteki statyczne i dynamiczne, a także moduły charakterystyczne dla konkretnego języka lub środowiska programowego
Podsumowanie:
Technologia obiektowa w censtrum zainteresowania stawia modelowany problem ze świata rzeczywistego oraz jego uczestników i dobiera do nich odpowiednie środki informatyczne podczas gdy proceduralna odwrotnie, przede wszystkim uwzględnia możliwości komputera.
KLASA: - abstrakcja kilku obiektów;
Dla twórcy systemu informatycznego klasa to pewien opis .Klasa wzbogacona o pewne podstawowe informacje zamienia się w konkret- obiekt. Obiekty nazywane są instancjami (egzemplarzami) klas. Z punktu widzienia programowania klasa to typ, obiekt to zmienna tego typu. Istnieje analogia pomiędzy klasą, a strukturą danych wzbogaconą o funkcje (analogia użyteczna, ale nieco zwodnicza). Klasa to uogólnienie dla podobnych do siebie obiektów z danej dziedzinie, a nie worek, w którym gromadzimy w luźny sposób powiązane ze sobą dane i funkcje.
DZIEDZICZENIE:
To mechanizm pozwalający na generalizację (specjalizację) i ponowne użycie.
Klasa dziedzicząca jest rodzaju klasy bazowej.
Pierwsza odziedzicza wszystkie cechy drugiej.
Klasa dziedzicząca będzie mogła udawać klasę bazową.
DZIEDZICZENIE WIELOKROTNE:
Dobra decyzja, gdy dziedziczymy klasy z różnych dziedzin zastosowania systemu
Zła decyzja, gdy dziedziczymy z klas z tej samej dziedziny zastosowań (np. Kształt i Powierzchnia)
Dziedziczenie wielokrotne stosujemy wówczas, gdy jest to bezwzględnie konieczne
POWIĄZANIA:
powiązanie określa stan, gdy dwie klasy w sposób dość niezależny i suwerenny są ze sobą skojarzone.
Zależność między obiektami musi być odzwierciedlona i jest reprezentowana pomiędzy ich klasami.
Zatem tam, gdzie obiekty będą powiązane, tam też istnieją powiązania pomiędzy klasami.
Ale nie w drugą stronę, gdyż powiązanie pomiędzy obiektami może być czasowe (powiązanie opcjonalne)
ZŁOŻENIE:
Ze złożeniem (agregacją) mamy do czynienia, gdy jeden obiekt jest częścią innego
Złożenie, a powiązanie:
Złożenie występuje tam, gdzie mamy do czynienia z relacją całość-część.
Złożenie różni się od powiązania:
- antysymetrią
- trwałością
- przechodniością
-
CECHY ZALEŻNOŚCI:Uściśleniu zależności służy liczność i szeregowanie
Każdą ze stron zalezności określa się w jednej z 5 liczości:
- dokładnie jeden
- wiele (zero lub więcej)
- opcjonalna (zero lub jeden)
- jeden lub więcej
- konkretna liczba (lub zakres)
Dodatkową cechą zależności jest to czy jest ona uszeregowana, czy nie.
Szeregowanie stosuje się, gdy ważna jest kolejność obiektów w zależnośc
Przypadkiem uszeregowania zależności jest zdefiniowanie klucza dostępu do
niej np. poprzez indeksowanie bazy danych (wartość indeksu = klucz)
Jeśli liczność danej zależności pomiędzy klasami zdefiniowana jest w sposób niekonkretny (wiele, jeden lub więcej) to oznacza, że poszczególne obiekty mogą mieć różną konkretną ilość.
SZCZEGÓLNE RODZAJE ZALEŻNOŚCI:Zależność opisana przez klasę:
dziedzina problemu przynosi więcej wiedzy na temat relacji niż tylko liczność i szeregowanie oraz jakie klasy stoją po obu jej stronach- wszystkie te cechy proszą się o własną klasę
Zale...
rwrc