Skrot.docx

(213 KB) Pobierz

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...

Zgłoś jeśli naruszono regulamin