All, stud, I semsetr, WSTEP DO PROGRAMOWANIA, WDI


Elementy funkcjonalne komputera IAS

Składniki struktury komputera IAS:

1. Pamięć (Memory),

2. Jednostka arytmetyczno-logiczna (Arithmetic - Logic Unit),

3. Jednostka sterująca (Control Unit),

4. Jednostka wejściowa (Input),

5. Jednostka wyjściowa (Output).

Informatyka - zespół dyscyplin naukowych i technicznych zajmujących się

automatycznym przetwarzaniem, przechowywaniem i przesyłaniem

informacji oraz projektowaniem i budową do tego celu środków

technicznych.

Informatyka - dyscyplina naukowa zajmująca się badaniem, dla potrzeb

całej nauki, praw rządzących kodowaniem, zapisywaniem,

przetwarzaniem i przesyłaniem danych oraz wykorzystaniem tych

praw do tworzenia dla potrzeb ludzi urządzeń, metod i systemów.

Informatyka (lata 60-te) - Informatyka „Maszyny matematyczne i

przetwarzanie informacji”.

Informatyka - dziedzina nauki o tworzeniu właściwego modelu

reprezentującego problem i opracowaniu techniki

jego rozwiązania.

IEEE Computer Society (IEEE, Institute of Electrical and Electronic

Engineers, 1963) - organizacja ds. standa-ryzacji w

informatyce.

Informacja - każdy czynnik zmniejszający stopień niewiedzy o

badanym zjawisku, umożliwiający człowiekowi,

organizmowi Żywemu lub urządzeniu automatycznemu

polepszenie znajomości otoczenia i w

sprawniejszy sposób przeprowadzenie celowego

działania.

Informacja (G. Bateson) - różnica, która czyni różnicę.

Informacja - przyrost wiedzy, który może być uzyskany na podstawie

danych.

Dane - fakty, zdarzenia wyrażone w postaci jednostek

(abstrakcyjnych symboli, znaków).

Algorytm (algorithm) - sposób rozwiązania zagadnienia podany w formie

jednoznacznego, sformalizowanego zestawu czynności jakie należy

wykonać aby z poprawnych danych otrzymać oczekiwany wynik.

Algorytm - precyzyjna i jednoznaczna specyfikacja sekwencji operacji, które

przekształcają dane wejściowe na oczekiwane dane wyjściowe

(wyniki).

Program (program) - reprezentacja algorytmu w określonym języku :

np. binarnym (wewnętrznym), symbolicznym, proceduralnym,

obiektowym.

Program - ciąg zrozumiałych dla komputera instrukcji (rozkazów),

przeznaczonych do wykonywania. Obiekt pasywny.

Język programowania (program language) - zestaw zasad do

opisu algorytmu, umożliwiających komunikatywność

człowiek - komputer.

Kod źródłowy programu (source code) - Implementacja

algorytmu, zapis algorytmu w wybranym języku

programowania.

Proces (process) - wykonywanie programu, związane z

wykorzystaniem: licznika rozkazów (program counter), stosu

procesu (process stack), sekcji danych (data section). Obiekt

aktywny.

Algorytmy

Algorytm - ściśle określona procedura obliczeniowa, która dla

poprawnych danych wejściowych „produkuje” właściwe

wyniki.

Algorytm - skończona sekwencja reguł, która aplikuje się na

skończonej liczbie danych, pozwalająca rozwiązywać

określony problem (klasę problemów).

Algorytm - zespół reguł w procesie obliczeniowym (przetwarzania

danych)

Cechy algorytmu

-Określoność (Definiteness),

-Jednoznaczność (Uniqually determined),

-Skończoność (Finiteness),

-Ogólność (Generality),

-Efektywność (Effectiveness).

Algorytmiczne rozwiązywanie problemu

Układ kategorii: koncepcja - środki - realizacja

1. Postawienie problemu:

Definicja problemu,

Sprecyzowanie wymagań dotyczących rozwiązania,

Opis danych wejściowych (Input) i wyników(Output).

2. Budowanie algorytmu:

Koncepcja rozwiązania,

Zapis algorytmu i stopniowe precyzowanie,

Analiza algorytmu.

3. Tworzenie programu:

Wybór języka i struktur danych,

Kompilacja, testowanie.

Specyfikacja algorytmów

Formy specyfikacji algorytmów

Werbalna, opisowa (descriptive),

Schemat blokowy, sieć działań, (flow diagram, flow chart),

Pseudokodowa (pseudocode),

Języki programowania (programming languages).

Konstrukcje algorytmiczne

Elementarne konstrukcje algorytmiczne:

Bezpośrednie następstwo,

Wybór warunkowy,

Iteracja warunkowa,

Iteracja ograniczona.

Elementy analizy algorytmu

Cele analizy algorytmu:

Porównanie różnych algorytmów rozwiązujących te same problemy,

Przewidywanie wydajności w nowym środowisku,

Określenie wartości parametrów.

Aspekty analizy algorytmu:

Złożoność obliczeniowa (czasowa, pamięciowa),

Poprawność (semantyczna, syntaktyczna).

Operacje podstawowe (Basic operations)

Cechy operacji:

1. Proporcjonalność do czasu wykonania programu implementującego algorytm,

2. Proporcjonalność do liczby wszystkich operacji algorytmu,

3. Tego samego rzędu, co całkowita liczba wszystkich operacji algorytmu,

Problem:

Złożoność obliczeniowa algorytmu

Złożoność pesymistyczna (worst-case complexity),

Złożoność optymistyczna (best-case complexity),

Złożoność oczekiwana (average-case complexity).

Poprawność algorytmów

Sposoby dowodzenia:

Metoda empiryczna (testy funkcjonalne),

Formalne dowodzenie poprawności.

Specyfikacja danych wejściowych i wyników - warunki wstępne:

Asercja początkowa (precondition) - dotycząca danych wejściowych,

Asercja końcowa (postcondition) - dotycząca wyników.

Poprawność algorytmów

Wymagana:

1. Własność stopu (halting property) - algorytm zatrzymuje się i wyprowadza wynik (obliczenia nie są przerywane).

2. Poprawność wyniku (data correctness).

Poprawność częściowa (partial corectness) - spełnienie p. 2,

Poprawność całkowita (full corectness) - spełnienie p. 1, 2.

Poprawność algorytmów

Algorytm jest poprawny jeśli:

1. Posiada własność określoności obliczeń względem asercji początkowej.

2. Posiada własność stopu względem asercji początkowej.

3. Dla każdego zestawu danych wejściowych spełniających asercję

początkową obliczenie zakończy się i wyniki spełniają asercję

końcową.

Niezmienniki pętli (Loop invariants).

Niezmiennik pętli: warunki i relacje spełniane przez zmienne i

struktury danych na początku lub końcu każdego przebiegu pętli.

Etapy dowodzenia poprawności:

-Wybór niezmiennika pętli,

-Dowód prawdziwości niezmiennika względem liczby

przebiegów pętli.

Złożoność pamięciowa

 Złożoność pamięciowa oczekiwana (expected space complexity)

 Złożoność pamięciowa najgorszego przypadku (worst case space complexity)

Metody obniżania złożoności pamięciowej:

 Wielokrotne obliczanie wartości,

 Stosowanie struktur rozproszonych,

 Kompresja danych,

 Strategie przydziału pamięci.

Metody projektowania algorytmów

 Strategia „dziel i rządź” (Divide-and-conquer strategy)

 Rekurencja (Recursive approach)

 Programowanie dynamiczne ( Dynamic Programming)

 Metoda przyrostowa (Constructive method)

 Metoda zachłanna (Greedy approach).

Definicja rekurencyjna:

1. Przypadek podstawowy - wyszczególnia obiekty podstawowe

2. Reguła rekurencyjna (indukcyjna) - umożliwia konstruowanie nowych obiektów z

wcześniej zbudowanych lub podstawowych.

Algorytmy rekurencyjne (Recursive algorithms)

Wymagania przy układaniu algorytmów rekurencyjnych:

 Określenie warunku kończącego algorytm

 Dekompozycja problemu.

Implementacja rekurencji

Rekord aktywacji (activation record):

 Parametry wywołania

 Wartość zwracana

 Zmienne lokalne

 Dynamiczne dowiązanie - wskaźnik do rekordu wywołania

procesu wywołującego

 Adres powrotu do procesu wywołania.

Wielopoziomowa organizacja komputera

 Poziom 0 - poziom układów logicznych (digital logic level)

 Poziom 1 - poziom mikroarchitektury (microarchitecture level)

 Poziom 2 - poziom architektury listy rozkazów (ISA, Instruction set architecture level)

 Poziom 3 - poziom systemu operacyjnego (operating system machine level)

 Poziom 4 - poziom języka asemblera (assembler language)

 Poziom 5 - poziom języków wysokiego poziomu (high-level languages).

System operacyjny

Definicje systemu operacyjnego:

1. System operacyjny (system: sterujący, nadzorczy, nadrzędny) -

zorganizowany zespół programów, które pośredniczą między sprzętem a

Użytkownikiem, dostarczając zestawu środków ułatwiających

projektowanie, kodowanie, uruchamianie i eksploatację programów.

2. System operacyjny - warstwa oprogramowania operująca bezpośrednio na

sprzęcie, której celem jest zarządzanie zasobami systemu komputerowego i

stworzenie Użytkownikowi przyjaznego środowiska.

3. System operacyjny - oprogramowanie, które udostępnia maszynę

rozszerzoną (maszynę wirtualną) łatwiejszą do programowania.

System operacyjny:

 Zarządza zasobami systemu komputerowego

 Stworzą środowisko wygodne dla Użytkownika

Zadania systemu operacyjnego

 Definiuje interfejs Użytkownika

 Definiuje i udostępnia system plików

 Udostępnia środowisko do uruchamiania programów

 Udostępnia mechanizmy synchronizacji i komunikacji procesów

 Steruje urządzeniami wejścia-wyjścia

 Obsługuje błędy zaistniałe w sprzęcie i oprogramowaniu

Jądro systemu operacyjnego (Kernel)

Elementy jądra systemu operacyjnego:

 Zarządca plików (File manager)

 Zestaw programów obsługi urządzeń peryferyjnych (Device driver)

 Zarządca pamięci (Memory manager)

 Moduł szeregujący (Scheduler)

Usługi systemu operacyjnego

Usługi dla Użytkownika:

 Wykonanie programu: załadowanie do pamięci, uruchomienie, zakończenie

 Operacje we/wy: na pliku lub urządzeniu

 Manipulowanie systemem plików: tworzenie, usuwanie, zapisywanie, odczytywanie pliku

 Wykrywanie błędu

Usługi systemu operacyjnego

Usługi do optymalizacji działania systemu:

 Przydzielanie zasobu

 Rozliczanie: przechowywanie danych wykorzystaniu zasobów systemu do wystawiania rachunku lub celu statystycznych

 Ochrona: nadzorująca nad dostępem do zasobów systemu,

zabezpieczenie systemu przed niepożądanymi czynnikami

zewnętrznymi (uwierzytelnienie tożsamości Użytkownika w

systemie)

Funkcje systemowe

Nadzorowanie procesów:

 Zakończenie (end), zaniechanie (abort)

 Załadowanie (load), wykonanie (execute)

 Utworzenie procesu (create process), zakończenie procesu

(terminate process)

 Czekanie czasowe (wait for time)

 Czekanie na zdarzenie (wait for event)

 Sygnalizacja zdarzenia (signal event)

 Przydział i zwolnienie pamięci (allocate, free memo

Operacje na plikach:

 Utworzenie / usunięcie pliku (create / delete file)

 Otwarcie (open), zamknięcie (close)

 Czytanie (read), pisanie (write), zmiana położenia (reposition)

 Pobranie atrybutów pliku (get file attributes), określenie

atrybutów pliku (set file attributes)

Operacje na urządzeniach:

 żądanie / zwolnienie urządzenia (request / release device)

 Czytanie (read), pisanie (write), zmiana połoŜenia (reposition)

 Pobranie / ustawienie atrybutów urządzenia (get / set device

attributes)

 Logiczne przyłączenie / odłączenie urządzeń (logically attach /

detach devices)

Utrzymywanie informacji:

 Pobranie czasu, daty (get time, date) ustawienie czasu, daty (set

time, date)

 Ustawienie atrybutów procesu, pliku, urządzenia (set process,

file, device attributes)

Komunikacja:

 Utworzenie, usunięcie połączenia komunikacyjnego (create,

delete communication connection)

 Nadawanie, odbieranie komunikatów (send, receive messages)

 Przekazanie informacji o stanie (transfer status information)

 Przyłączanie, odłączanie urządzeń zdalnych (attach, dettach

remote devices)

Zasoby i zarządzanie zasobami

Zasób (resource) - dowolny obiekt sprzętowy programowy lub informacyjny, który

może być Używany przez system komputerowy.

Zasoby systemu komputerowego:

 Procesor: czas pracy procesora

 Pamięć: przestrzeń adresowa, programy ochrony i transformacji adresu

 Urządzenia we/wy: przestrzeń adresowa dla pamięci masowych, sterowniki

urządzeniami pamięci masowych, drukarek, skaner itp., wirtualne pliki

we/wy

 Informacja: system plik

Zarządzanie zasobami:

 Planowanie dostępu do zasób

 Przydział zasobu

 Ochrona i autoryzacja dostępu do zasobu

Zadanie, program, proces, wątek

 Program - obiekt pasywny (zawartość pliku)

 Programy Użytkownika (user programs) - prace (tasks)

 Proces - wykonujący się program

 Zadania (jobs) - programy, procesy

 Proces - obiekt aktywny: licznik rozkazu, zbiór przydzielonych zasobów.

Dysponuje przestrzenią adresu, posiada podstawowy priorytet i

przypisanie do dostępnych procesorów, ma jeden lub więcej wątku

 Wiele procesu może być uruchomionych w oparciu o jedną kopię

programu

 Wykonywany proces może tworzyć procesy potomne

Zadanie, program, proces, wątek

Wątek: jednostka wykonywania zarządzana przez jadro.

Stany procesu:

 Gotowości: oczekiwanie na wykonywanie

 Pogotowia (standby): proces o najwyższym priorytecie będzie

wykonywany w pierwszej kolejności

 Wykonywania: wykonywany, do czasu wywłaszczenia

 Oczekiwania

 Przejściowy (transition): nowy proces czekający na zasoby

 Zakończenia: kończy działanie

Zarządzanie procesami

Stany procesu:

 Nowy - proces został utworzony

 Aktywny - są wykonywane instrukcje

 Czekający - proces czeka na zakończenie zdarzenia (np. operacja we/wy)

 Gotowy- proces czeka na przydział procesora

 Zakończony - proces zakończył działanie

Planowanie procesów

 Procesy w systemie są ulokowane w kolejkach (process queue)

 Procesy oczekujące w pamięci głównej gotowe do

działania są w kolejce procesów gotowych (ready queue)

• Procesy czekające na przydział konkretnego urządzenia

w kolejkach do urządzeń (device queue), każde

urządzenie ma własną kolejkę

Planowanie procesów

• Planista, program szeregujący (scheduler) - proces

systemowy, który odpowiada za wybrany proces z kolejek

• Planista długoterminowy (long-term scheduler), wybiera

procesy z pamięci masowej i ładuje je do pamięci w celu

wykonania

• Planista krótkoterminowy (short-time scheduler), planista

przydziału procesora (CPU scheduler) - wybiera jeden proces

spośród procesów gotowych do wykonania i przydziela mu

procesor;

Planowanie procesu

Rodzaje procesów:

• Procesy ograniczone przez we/wy - spędzają większość

czasu na operacjach we/wy

• procesy ograniczone przez procesor - spędzają większość

czasu na obliczeniach zajmując procesor

Zadanie planisty długoterminowego: dobranie dobrej mieszanki

procesów (process mix) zawierającą procesy obydwu

rodzajów

Planista średnioterminowy (medium-term scheduler) -

odpowiada za usuwanie procesów z pamięci w celu

zmniejszenia stopnia wieloprogramowości, takie

postępowanie - wymiana (swapping)

Planowanie przydziału procesora

Decyzje o przydziale procesora zapadają w sytuacjach:

 Proces przeszedł od stanu aktywności, do stanu czekania

 Proces przeszedł od stanu aktywności do stanu gotowości

 Proces przeszedł od stanu czekania, do stanu gotowości

 Proces kończy działanie

Planowanie przydziału procesora

1. Planowanie niewywłaszczeniowe (non-preemptive)

 Proces, który dostał procesor, nie odda go zaś do swego

zakończenia lub przejścia w stan czekania

 Nie wymaga wsparcia sprzętowego (np. zegara)

2. Planowanie wywłaszczeniowe (preemptive)

 Kosztowne - wymaga mechanizmów koordynacji

Kryteria planowania

 Wykorzystanie procesora - procesor powinien być zajęty pracą

 Przepustowość (throughput) - liczba procesów kończonych w

jednostce czasu

 Czas cyklu przetwarzania (turnaround time) - czas upływający

między nadejściem procesu do systemu i zakończeniem

przetwarzania procesu

 Czas oczekiwania - suma okresów oczekiwania przez proces w

kolejce procesów gotowych do wykonania

 Czas odpowiedzi (response time) - czas upływający między

wysłaniem Żądania i pierwszą odpowiedzią

algorytmy planowania

Strategia FCFS (First Come- First Served)

Proces, który pierwszy żąda procesor, pierwszy go otrzymuje

Wada: średni czas oczekiwania bywa długi

Algorytmy planowania

Najpierw najkrótsze zadanie SJF (Shortest Job First)

Wolny procesor zostaje przydzielony procesowi mającemu

najkrótszą wstępną fazę

Algorytmy planowania

Planowanie priorytetowe.

Każdemu procesowi przypisuje się priorytet.

Procesor przydziela się temu procesowi, którego priorytet jest

najwyższy w razie różnych priorytetów wg FCFS

Proces Czas trwania fazy Priorytet

Algorytmy planowania

Planowanie rotacyjne RR (Round Robin).

Podobny do FCFS, dodano wywłaszczanie:

• Ustala się małą jednostkę czasu - kwant czasu (time quantum),

10-100 ms

• Kolejka procesów gotowych do wykonania - kolejka cykliczna

• Każdy proces dostaje procesor na odcinek czasu, nie dłuższy

od kwantu czasu, kiedy jest generowane przerwanie od zegara

proces jest usuwany na koniec kolejki procesów gotowych

• Planista pobiera procesy w kolejności przyjścia FCFS

Klasyfikacja systemów komputerowych

Klasyfikacja systemów ze względu na sposób przetwarzania:

1. Systemy wsadowe (off-line processing systems, batch

processing) - przetwarzanie pośrednie niemożliwa ingerencja

człowieka w wykonywanie zadania.

2. Systemy interakcyjne (on-line processing systems) -

przetwarzanie bezpośrednie występuje bezpośrednia interakcja

pomiędzy Użytkownikiem a systemem.

Klasyfikacja systemów komputerowych

Klasyfikacja systemów ze względu na liczbę wykonywanych

programów:

1. Systemy wielozadaniowe (multitask processing) - dopuszczalne

jest istnienie wielu zadań (procesu), którym zgodnie z pewną

strategią na przemian przydzielany jest procesor.

2. Systemy z podziałem czasu (time-sharing systems) - wielu

Użytkowników, każdy uzyskuje dostęp do procesora przez pewną

małą porcję czasu; każdy Użytkownik ma przynajmniej jeden

proces w pamięci.

Klasyfikacja systemów komputerowych

1. Systemy wieloprocesorowe (multiprocessor systems) - pewna liczba

procesorów współpracuje ze sobą dzieląc szynę, zegar, niekiedy

pamięć i urządzenia zewnętrzne. Systemy ściśle powiązane (tightly

coupled systems).

2. Systemy czasu rzeczywistego (real-time system) - zorientowane na

przetwarzanie z uwzględnieniem uwarunkowań czasowych.

Wymagane zakończenie zadań przed liniami krytycznymi

(deadlines).

3. Systemy sieciowe i rozproszone (network and distributed systems),

luźno połączone (loosely coupled) - umożliwiają zarządzanie zbiorem

rozproszonych jednostek przetwarzających (komputerów), które są

zintegrowane siecią komputerową i nie współdzielą fizycznie

zasobów.

Translatory

 Asembler (Assembler)

Symboliczna reprezentacja języka maszynowego. Zadanie

asemblera polega na zestawieniu (assemble) rozkazów maszynowych

z kodów ich operacji i wartości argumentów otrzymanych przez

przetłumaczenie nazw mnemonicznych.

Język źródłowy to język asemblera (assembly languages).

 Kompilator (Compiler)

Translator języków wysokiego poziomu. Praca kompilatora polega na

łączeniu (compile) ze sobą rozkazów języka maszynowego.

Środowisko programistyczne

Narzędzia:

 VisualStudio.Net

VS - platforma programistyczna wykorzystująca język C++, C# do

szybkiego tworzenia aplikacji dla systemu MS Windows.

Java, C# stanową podstawę platformy .NET.

 Borland Delphi.

Delphi - pakiet tworzenia obiektowych programów przy wykorzy-staniu

języka Object Pascal.

 Borland C++ BuilderX.

Borland C++ BuilderX - wykorzystanie C++ do tworzenia aplikacji dla

systemów: Linux, MS Windows.

 Borland JbuilderX.

Środowisko programistyczne języka Java dla platform:

MS Windows, Linux.

Środowisko programistyczne

Narzędzia:

 RAD (Rapid Application Development).

Umożliwiają tworzenie programu z gotowych komponentów:

osadzonych w bibliotekach, diagramów UML (Unified Modeling

Language).

 Eclipse.

Zintegrowane środowisko tworzenia projektów Java. Możliwości

integracji z programami pomocniczymi np. cvs (concurrent

versions system), svn (subversion).

 Magic eDeveloper.

Koncepcja szybkiego tworzenia portali internetowych,

wykorzystujących bazy danych. Środowisko RAD dla Internetu.

Hierarchia języków programowania

 Mikroprogramowanie (Microprogramming)

 Język maszynowy (wewnętrzny) ( Machine language)

 Język asemblerowy (symboliczny) (Assembly language)

 Programowanie strukturalne (proceduralne ) (Structured programming)

 Programowanie modularne (Modular programming)

 Programowanie obiektowe (Object-oriented programming)

 Programowanie komponentowe (Component-object model)

Język maszynowy

Język maszynowy, język wewnętrzny (Internal code)

Rozkaz maszynowy:

 Rozkazy w postaci binarnej, kod operacji (operation code)

 Adresy absolutne - binarne (operand field)

Budowa słowa maszynowego:

Programowanie strukturalne i proceduralne

Aspekt strukturalizacji:

 Struktury sterujące języka programowania

 Przejrzystość algorytmów i programów

Aspekt proceduralny:

 Systematyczny podział na części składowe, których powiązania

wzajemne są dobrze określone (procedury, funkcje)

 Ułatwienie uruchamiania i modyfikacji programów

 Projektowanie zstępujące (top-down), E. Dijkstra

 Refaktoryzacja kodu źródłowego (XP, Extreme Programming)

Modularność

Modularość - podział programu na oddzielne moduły o określonych funkcjach,

w celu umożliwienia pracy nad jednym programem wielu programistom

(opracowywanie, pielęgnowanie i uruchamianie).

Kompletna translacja programu odbywa się w dwóch etapach:

 Kompilacja (asemblacja) modułów źródłowych

 Konsolidacja skompilowanych modułów

Programowanie komponentowe

Programowanie komponentowe - definiowanie obiektów samoopisujacych się

(komponentów programowych) niezależnie od języka programowania.

Umożliwienie włączenie do aplikacji obiektów należących do innych

programów, przy zachowaniu pewności, że każdy z komponentów będzie w

stanie komunikować się i „rozumieć” funkcje pozostałych.

Technologia COM (Component-object model):

 OLE (Object Linking and Embedding) - łączenie i osadzanie obiektów,

standard współużytkowania informacji miedzy aplikacjami, dający możliwość

tworzenia obiektów w jednej aplikacji i włączania ich do innych.

 ActiveX - zbiór protokołów i interfejsów programowych API (Application

Programming Interface) służących do tworzenia scalania i udostępniania

komponentów oprogramowania.

 DCOM (Distributed Component-object model) - podstawa do tworzenia

środowiska rozproszonego przetwarzania danych poprzez przesyłanie i

udostępnianie komponentów w sieci.

Paradygmaty programowania

Podstawowe paradygmaty:

 Imperatywny

 Funkcyjny

 Deklaratywny (programowanie w logice)

 Obiektowy

Założenia:

 Mechanizmy są implementowane w realnych systemach komputerowych.

 Komputery działają w oparciu o imperatywną architekturę von Neumanna.

 Każdy uruchomiany program musi być najpierw przetłumaczony do ciągu rozkazów w języku wewnętrznym konkretnej maszyny.

Paradygmat imperatywny

Postulaty paradygmatu:

 Stan maszyny wyznaczają zawartości rejestrów procesora oraz pamięci

 Instrukcja imperatywna zmienia stan maszyny

 Program - ciąg instrukcji, których realizacja jest zgodna z cyklem

maszynowym, rozkaz: <pobierz-dekoduj-wykonaj>

Języki imperatywne wysokiego poziomu:

Pascal, Fortran, Cobol, C, Ada

 Programowanie imperatywne (pierwotny sposób programowania), w którym

program (procedura) postrzegany jest jako ciąg poleceń dla komputera.

 Proces programowania sprowadza się do utworzenia ciągu instrukcji

imperatywnych (poleceń).

Paradygmat funkcyjny

Cechy paradygmatu:

 Program - złożona funkcja (w sensie matematycznym), która otrzymuje dane

wejściowe i wylicza wynik

 Brak imperatywnych pętli

 Brak stanu maszyny i zmiennych

 Przyjazne środowisko do konstruowania dużych pakietów oprogramowania.

Programowanie funkcyjne - składanie funkcji z wykorzystaniem

rekurencji.

Program jest złożeniem wielu zagnieżdżonych elementarnych funkcji

(wymuszona modułowość budowanych programów).

Paradygmat deklaratywny (programowanie w logice)

Cechy paradygmatu:

 Program - zbiór zdań początkowych, na bazie których algorytm dokonuje

wnioskowania dedukcyjnego.

 Algorytm oparty jest na cyklicznie stosowanej zasadzie rezolucji

(wnioskowaniu dedukcyjnym).

Składniki, z których konstruuje się zdania początkowe to predykaty.

Predykat składa się z identyfikatora predykatu, po którym w

nawiasach umieszcza się argumenty predykatu.

Przykład predykatu reprezentującego fakt: jan jest ojcem jerzego:

ojciec (jan, jerzy).

Zdania w Prologu są albo faktami albo regułami. W obu przypadkach

zdanie jest zakończone kropką.

Fakt składa się z pojedynczego predykatu.

Prolog odróżnia stałe od zmiennych w ten sposób, że nazwy stałych

rozpoczynają się małymi literami a zmienne dużymi.

Paradygmat obiektowy

Paradygmat obiektowy (programowanie obiektowe OOP (Object-oriented

programming).

Obiekt- odrębna jednostka stanowiąca powiązanie danych z operacjami na nich.

Program - zbiór powiązanych ze sobą obiektów, zawierających dane i umiejących

wykonywać na nich pewne operacje.

klasa (class) - rozszerzeniem struktury danych o funkcje (metody) operujące na

polach klasy.

Obiekt - egzemplarz klasy umieszczony w pamięci (instancja klasy).

CORBA (Common Object Request Broker Architecture) - standard obiektowych

architektur programowych.

Paradygmaty programowania

Paradygmaty inne:

 Programowanie na poziomie wartości

 Programowanie skalarne i macierzowe

 Paradygmat programowania proceduralnego

Konkretny język programowania reprezentuje jeden lub więcej

paradygmatów:

 Fortran, Pascal i C - języki pozwalające stosować paradygmat programowania

imperatywnego.

 Java, C# - języki obiektowe, w których typowe programowanie imperatywne

zostało mocno ograniczone.

 C++ - język zarówno obiektowy jak i imperatywny.

 Programowanie imperatywne - szczególny, wynaturzony przypadek

programowania obiektowego.

Język formalny

Elementy języka formalnego:

 Alfabet A = {a1, a2, …, an} - dowolny zbiór symboli, z których zestawiane są

słowa języka,

 Słowo - uporządkowany ciąg symboli alfabetu,

 Język A* - podzbiór zbioru możliwych słów nad alfabetem A,

 Gramatyka - zbiór reguł umożliwiających generowanie słów i zdań.

Przykład:

Alfabet: A={a, b}

Gramatyka: reguła R1 - a jest poprawne,

reguła R2 - Jeżeli  jest poprawne to ab jest poprawne.

Poprawne słowa:

a - na podstawie R1

aab - na podstawie R1 i R2

aaabb - na podstawie R1 i dwukrotnie stosowanej R2

Język A* = {aab, aaabb, a, b}.

Gramatyki bezkontekstowe

Gramatyka bezkontekstowa:

G = < T, N, P,  >

 T- zbiór symboli końcowych (terminal symbols ), z których budowane są słowa

generowane przez gramatykę G,

 N - zbiór symboli pomocniczych, nieterminalnych używanych przy określaniu

reguł opisujących konstruowanie słów poprawnych w sensie gramatyki G,

 P - Lista produkcji (list productions): zestaw reguł tzw. produkcji,

 ∈N: aksjomat języka, kategoria syntaktyczna (syntactic category), podaje z jakiej

konstrukcji można wyprowadzić wszystkie generowane przez gramatykę napisy.

Kategoria syntaktyczna

Gramatyka składa się z co najmniej jednej produkcji.

Każda produkcja składa się z trzech części:

 Części nagłówkowej, symbolu początkowego (head, start symbol), która jest

kategoria syntaktyczną,

 Metaznaku (metasymbol)

 Części zasadniczej (body).

Produkcje wchodzące w skład zbioru P są postaci:

x >u, x(należy)N, u(należy)(N(suma)T)*

Gramatyka wyrażenia arytmetycznego

Elementy składowe gramatyki:

 Zbiór T: T = {a, b, d, +, *, (, )}

 Zbiór N: N = {W, S, C}

Semantyka symboli: W - wyrażenie, S - składnik, C - czynnik.

 Kategoria syntaktyczna :  = W

 Lista produkcji:

P = { W>S; W>W+S; S>C; S>C*S;S>S*C; C>a; C>b; C>d;

C>W) }

Przykład: (a+b)*d

W

S

C*S

(W)*S

(W+S)*C

(S+S)*C

(C+C)*C

(a+c)*d

Sposoby opisu składni

Notacje:

 BNF (Backus-Naur Form)

 EBNF (Extended Backus-Naur Form)

 Diagramy syntaktyczne (Syntactic diagram)

Notacje: BNF, EBNF

Notacja BNF:

 Symbole terminalne,

 Symbole nieterminalne,

 Produkcje,

 Metasymbole

< > symbol pomocniczy,

::= symbol produkcji,

 symbol alternatywy,

( ) powtórzenie, { } - EBNF

Wyrażenie arytmetyczne:

<W> ::= <S> <W> + <S>  <S> + <W>

<S> ::= <C> <C> * <S>  <S> * <C>

<C> ::= (<W> )a  b 

Odwrotna Notacja Polska ONP

Beznawiasowe algebry Łukasiewicza

Gramatyka wyróżnia arytmetycznego w ONP:

Zbiór T: T = {a, b, d, +, *}

P: <W> ::= <Z> <Z> <O> | <Z>

<Z> ::= <X> <X> <O> | <X>

<X> ::= a | b | d

<O> ::= + | *

Przykład:

(a+b)*d ≡ ab + d*

Maszyna Turinga - algorytmy

 Maszynę Turinga możemy w rzeczywistości traktować jako komputer z jednym

ustalonym programem,

 Oprogramowaniem jest diagram przejść,

 Sprzęt składa się z głowicy, taśmy oraz (ukrytego) mechanizmu, który

faktycznie przechodzi diagram przejść zmieniając stany i sterując czynnościami

czytania, pisania, wymazywania i ruchu głowicy.

Algorytmiczne problemy P, NP:

 P - klasa zawierająca problemy rozwiązywalne przez deterministyczne

maszyny Turinga w czasie wielomianowym.

 NP - klasa zawierająca dokładnie te problemy decyzyjne, które są

rozwiązywalne przez niedeterministyczne maszyny Turinga w czasie

wielomianowym.

Teza Churcha-Turinga

Teza Churcha-Turinga:

Maszyna Turinga potrafi rozwiązać każdy efektywnie rozwiązywalny problem

algorytmiczny

Interpretacja: Każdy problem algorytmiczny, dla którego możemy znaleźć

algorytm dający się zaimplementować w dowolnym języku, wykonujący się na

dowolnym komputerze, nawet na takim, którego jeszcze nie zbudowano, ale

można zbudować, (nawet na takim, który wymaga nieograniczonej ilości

czasu i pamięci dla coraz większych danych) jest także rozwiązywalny przez

maszynę Turinga.

Własności entropii

Funkcja H(X):

 Ciągła na odcinku [0, 1] i symetryczna

 Posiada dolne i górne ograniczenie

0 = H(1, 0,..., 0)H(p1,..., pn)=<H(1/n,..., 1/n) = lg n.

 Własność grupowania.

Jeśli w zbiorze X = {x1,..., xn} symbole x1,..., xi tworzą podzbiór Xi, to:

H(p1,..., pi, pi+1,..., pn) = HX-Xi + HXi

Kodowanie informacji

 Kod wynikowy nazywamy jednoznacznie dekodowalnym jeżeli istnieje

tylko jeden sposób podziału ciągu kodowego na oddzielne słowa kodu.

 Kod jest kodem przedrostkowym jeśli nie możemy otrzymać żadnego

słowa kodu z innego słowa kodu poprzez dodanie do niego zer lub

jedynek.

 Kodem optymalnym dla danego rozkładu prawdopodobieństwa

nazywamy kod, dla którego liczba Lc posiada najmniejszą wartość.

Systemy kodowania danych

Reprezentacja danych alfanumerycznych.

 Nośnikami danych są sygnały elektryczne przetwarzane przez system układów

elektronicznych.

 Układy pracują w logice dwuwartościowej i nazywane są logicznymi układami

cyfrowymi.

Elementy tych układów pozostają w dwóch stanach:

 Stanie wysokim (istnieje wartość amplitudy napięcia - Umax, prądu - Imax)

 Stanie niskim (istnieje wartość amplitudy napięcia - Umin, prądu - Imin)

Stany te oznaczamy odpowiednio: stan wysoki - 1, stan niski - 0 (konwencja logiki

dodatniej).

Cechy kodu binarnego:

 Duża niezawodność układów dwustanowych.

 Łatwość opisu, analizy i syntezy tych układów.

Stany 1 oraz 0 utożsamiane są z cyframi binarnymi

 Mała ilość przekazywanej informacji charakterystyczna dla elementów

dwustanowych (logiki dwuwartościowej).

Kody danych alfanumerycznych

Standardy:

 ASCII (American Standard Code for Information Interchange),

 ISO (International Standard Organisation),

 ANSI (American National Standard Institute),

Extended ASCII (IBM, 1981) 8-bitowy kod znaków:

 Alfanumerycznych,

 Matematycznych,

 Symboli specjalnych,

 Znaków sterujących.

Pozycyjne systemy liczbowe

Systemy stałobazowe ( Radix-based systems) - systemy pozycyjne, w których

poszczególne wagi są potęgami stałej całkowitej, zwanej podstawą lub bazą.

Format stałopozycyjny (Radix notation) - reprezentacja ustalonej pozycji kropki

oddzielającej części całkowitą od ułamkowej.

Binarny system liczbowy

Kod NBC (Natural Binary Code). Liczba całkowita.

Ciąg cyfr binarnych:

an-1 an-2 … an-2 … a1 a0

wyraża wartość liczby całkowitej będącej odpowiednikiem liczby dziesiętnej:

A = an-1 2n-1 + an-2 2n-2 + … + a1 21 + a0 20

ai - wartość i-tego bitu liczby

a0 - najmniej znaczący bit lsb (least significant bit)

ai - najbardziej znaczący bit msb (most significant bit)

1 1 0 1(2) ->13(10)



Wyszukiwarka

Podobne podstrony:
zarz procesami planowanie, stud, I semsetr, WSTEP DO PROGRAMOWANIA, WDI
klas sys komp, stud, I semsetr, WSTEP DO PROGRAMOWANIA, WDI
entropia kodowanie, stud, I semsetr, WSTEP DO PROGRAMOWANIA, WDI
def informatyka, stud, I semsetr, WSTEP DO PROGRAMOWANIA, WDI
pradygmaty prog, stud, I semsetr, WSTEP DO PROGRAMOWANIA, WDI
srod programowania translatory, stud, I semsetr, WSTEP DO PROGRAMOWANIA, WDI
jezyk bnf ebnf, stud, I semsetr, WSTEP DO PROGRAMOWANIA, WDI
System operacyjny, stud, I semsetr, WSTEP DO PROGRAMOWANIA, WDI
rekurencja, stud, I semsetr, WSTEP DO PROGRAMOWANIA, WDI
Projektowanie oprogramowania Wstep do programowania i techniki komputerowej
2011-2012 wstęp do P program, wstęp do psychologii k
Gorazd T Kurs C Wstęp do Programowania
PHP Praktyczne wprowadzenie R 4 Wstęp do programowania Proste skrypty PHP
Wstęp do programu z poprawką, bierzmowanie
e Wstep do programowania DS
Wilkosz, Wstęp do programowania, kolokwia KD1-09 10l
Wilkosz, Wstęp do programowania, kolokwia K2-08 09l

więcej podobnych podstron