Materiały uzupełniające na prawach rękopisu do ćwiczeń
Laboratoryjnych (MudoL) „Informatyka – Programowanie”.
Wyłącznie
do
celów
dydaktycznych,
dla
studentów
Politechniki Świętokrzyskiej
Politechnika Świętokrzyska, Katedra Inżynierii Produkcji
Wersja: 2008-11-19
M
M
M
Mudo
udo
udo
udoL
L
L
L
Nr 1
Nr 1
Nr 1
Nr 1
P
P
P
P
ROGRAMOWANIE
ROGRAMOWANIE
ROGRAMOWANIE
ROGRAMOWANIE
Wybrane zagadnienia
Sławomir Luściński
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
1
S
S
S
S
PIS
PIS
PIS
PIS
T
T
T
T
REŚCI
REŚCI
REŚCI
REŚCI
Informatyka
Informatyka
Informatyka
Informatyka ................................
................................
................................
................................................................
................................
................................
.........................................................
.........................
.........................
......................... 2
2
2
2
Przedmiot informatyki ........................................................................ 2
System informacyjny .......................................................................... 2
System informatyczny ........................................................................ 3
Wprowadzenie do algorytmów
Wprowadzenie do algorytmów
Wprowadzenie do algorytmów
Wprowadzenie do algorytmów ................................
................................
................................
.............................................................
.............................
.............................
............................. 3
3
3
3
Algorytm .............................................................................................. 3
Procedury ............................................................................................ 5
Modularyzacja algorytmów ................................................................ 7
Język programowania
Język programowania
Język programowania
Język programowania ................................
................................
................................
................................................................
................................
................................
..........................................
..........
..........
.......... 8
8
8
8
Co to jest język programowania? ........................................................ 8
Twierdzenie Boehma- Jacopiniego o strukturach sterujących ......... 9
Podstawowe struktury sterujące .................................................... 9
D-struktury ...................................................................................... 9
Twierdzenie ................................................................................... 10
Proces programowania
Proces programowania
Proces programowania
Proces programowania ................................
................................
................................
................................................................
................................
................................
......................................
......
......
...... 11
11
11
11
Typy danych ...................................................................................... 11
Zasady programowania .................................................................... 12
Programy podporządkowane strukturom danych ........................... 13
Niezawodność oprogramowania ....................................................... 13
Bibliografia
Bibliografia
Bibliografia
Bibliografia ................................
................................
................................
................................................................
................................
................................
........................................................
........................
........................
........................ 16
16
16
16
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
2
IIII
NFORMATYKA
NFORMATYKA
NFORMATYKA
NFORMATYKA
Przedmiot informatyki
Przedmiot informatyki
Przedmiot informatyki
Przedmiot informatyki
Informatyka
Informatyka
Informatyka
Informatyka
jest nauką o przetwarzaniu
informacji
, zwłaszcza przy
użyciu komputerów (Turski, 1989). Informatyka, jako ogół dyscyplin
naukowych i technicznych obejmuje:
• teorie informatyczne,
• budowanie systemów informatycznych (w tym programowanie),
• budowę i działanie sprzętu komputerowego,
• zastosowania metod informatycznych w różnych dziedzinach
działalności ludzkiej i in.
Teorie informatyczne zajmują się badaniem zjawisk związanych z
operowaniem informacją. W oparciu o prawa rządzące tymi zjawiskami
konstruuje się narzędzia informatyki, na które składają się algorytmy,
języki programowania, programy, komputery, systemy przesyłu danych
itp. Teorie informatyki posługują się językiem i metodami matematyki,
logiki matematycznej oraz takich specyficznych dziedzin jak: teoria
języków formalnych i automatów, teoria algorytmów, teoria kolejek.
Informatyka określana współcześnie jako Information Technology
Information Technology
Information Technology
Information Technology (IT)
integruje przede wszystkim dwa obszary wiedzy: techniczny związany z
technologiami
komputerowymi
i
komunikacyjnymi
oraz
obszar
metodologiczny o zachowaniach środowisk społecznych i przyrodniczych.
Interdyscyplinarne tło wiedzy informatycznej obejmuje nauki techniczne,
przyrodnicze, społeczne, logikę (Bazewicz, 1993).
Programowanie i budowanie systemów informatycznych
Programowanie i budowanie systemów informatycznych
Programowanie i budowanie systemów informatycznych
Programowanie i budowanie systemów informatycznych obejmuje w
szczególności tworzenie narzędzi ułatwiających programowanie i ogólnie
— posługiwanie się komputerami. Do narzędzi tych należą: języki
programowania, translatory, systemy operacyjne i in.; do działu
informatyki związanego z programowaniem należą też metody
programowania i dowodzenia poprawności programów.
System informacyjny
System informacyjny
System informacyjny
System informacyjny
System
System
System
System informacyjny
informacyjny
informacyjny
informacyjny to „wielopoziomowa struktura, która pozwala
użytkownikowi tego systemu na transformowanie określonych informacji
wejścia na pożądane informacje wyjścia za pomocą odpowiednich
procedur i modeli” (Kisielnicki, i inni, 2005). System informacyjny (SI)
dowolnej organizacji jest zbiorem elementów określonym jako:
SI = {P, I, T, O, M, R}
SI = {P, I, T, O, M, R}
SI = {P, I, T, O, M, R}
SI = {P, I, T, O, M, R}
gdzie:
P – zbiór podmiotów, które są użytkownikami systemu,
I – zbiór informacji o sferze realnej, a więc tzw. zasoby
informacyjne,
T – zbiór narzędzi technicznych stosowanych w procesie
pobierania, przesyłania, przetwarzania,
przechowywania i wydawania informacji,
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
3
Algorytm to specyfikacja ciągu
operacji, które w wyniku
działania na wejściowy zbiór
obiektów dają wyjściowy zbiór
obiektów
(Marcotty, i inni, 1991)
O – zbiór rozwiązań systemowych stosowanych w danej
organizacji, czyli stosowana formuła zarządzania
(scentralizowana, rynkowa),
M – zbiór metainformacji, czyli opis systemu informacyjnego
i jego zasobów informacyjnych,
R – relacje pomiędzy poszczególnymi elementami.
System informatycz
System informatycz
System informatycz
System informatyczny
ny
ny
ny
System informatyczny
System informatyczny
System informatyczny
System informatyczny (SI) to „
wyodrębniona część systemu
informacyjnego, która z punktu widzenia przyjętych celów jest
skomputeryzowana”
(Kisielnicki, i inni, 2005). System informatyczny
składa się z następujących elementów:
• sprzętu (hardware),
• oprogramowania komputerów (software),
• baz danych, telekomunikacji,
• ludzi (personelu),
• organizacji.
System informatyczny zarządzania
System informatyczny zarządzania
System informatyczny zarządzania
System informatyczny zarządzania (SIZ) (
Management Information
System - MIS
) to formalny system komputerowy dokonujący wyboru,
udostępniania i integracji pochodzących z różnych źródeł danych po to,
aby w odpowiednim czasie dostarczyć informacji niezbędnych do
podejmowania decyzji
1
.
W
W
W
W
PROWADZENIE DO ALGOR
PROWADZENIE DO ALGOR
PROWADZENIE DO ALGOR
PROWADZENIE DO ALGORYTMÓW
YTMÓW
YTMÓW
YTMÓW
Algorytm
Algorytm
Algorytm
Algorytm
Za (Turski, 1979) przez algorytm będziemy rozumieć „
opis obiektów
łącznie z opisem czynności , które należy wykonać z tymi obiektami, aby
osiągnąć określony cel”
przy znanym poziomie szczegółowości
,
na
którym
formułuje się dany algorytm. Poziom szczegółowości wyznaczony jest
przez repertuar nazw czynności i klasę obiektów.
Algorytm musi być przedstawiony w formie komunikatywnej co
najmniej dla programisty. W dalszej części tekstu posłużymy się
przykładową koncepcją notacyjną – rodzajem języka – do zapisu
algorytmów przedstawioną w (Turski, 1979).
Opisy obiektów występujących w
algorytmie nazywamy
deklaracjami
, zaś
opisy czynności –
instrukcjami.
W
algorytmach występują obiekty proste i
obiekty złożone. Do obiektów prostych
zaliczamy obiekty, których wartościami
są liczby całkowite, rzeczywiste, wartości
logiczne, ciągi znakowe. Do obiektów
złożonych
zaliczamy
tablice.
1
E. Turban za (Kisielnicki, i inni, 2005)
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
4
Jednowymiarowa
tablica
(np.
kolumna
lub
wiersz)
to
ciąg
ponumerowanych obiektów, których wartości są tego samego typu;
rozmiar takiej tablicy to liczba elementów. Dwuwymiarowa tablica to
ciąg wierszy lub kolumn , z których każdy liczy tyle samo elementów o
wartościach tego samego typu. Rozmiary dwuwymiarowej tablicy to
liczba wierszy (kolumn) i liczba elementów w wierszu (kolumnie).
Tabela 1 poniżej prezentuje podstawowe schematy instrukcji
stosowanych w języku zapisu algorytmów zaproponowanego w (Turski,
1979).
Tabela 1. Schematy instrukcji. Źródło: opracowanie własne na podstawie (Turski, 1979)
Nazwa
schematu
Schemat
Instrukcja
przypisania
N
:=
W
N
jest nazwą obiektu, a
W
– wyrażeniem.
Wylicza się wartość wyrażenia
W
, a następnie podstawia się jako
wartość obiektu o nazwie
N.
Wyliczenie wartości wyrażenia
W
polega
na wykonaniu operacji, których znaki występują w
W
, na wartościach
obiektów, których nazwy figurują w
W
.
Instrukcje z
wyborem
(warunkowe,
(selekcje)
jeśli W to I
W
jest opisem warunku, a
I
– opisem instrukcji którą zamierzamy
wykonać, jeśli wartość logiczna warunku = Prawda.
jeśli W to I
1
w przeciwnym wypadku I
2
Wyboru uzależnionego od wartości logicznej warunku
W
można
dokonać pomiędzy dwoma instrukcjami
I
1
i
I
2
.
przypadek N spośród ( I
1
, I
2
, …, I
n
)
Najbardziej ogólna postać selekcji który interpretuje się następująco:
wylicza się wartość wyrażenia
N
przyjmującego wyłącznie wartości
całkowite z przedziału [1:n], następnie wykonuje się tę instrukcję z
wykazu
I
1
,
I
2
, …, I
n,
której numer jest zgodny z otrzymaną wartością
wyrażenia
N.
Iteracja
powtarzaj I aż do W
Instrukcja
I
jest powtarzana tyle razy, ile trzeba na doprowadzenie do
spełnienia warunku
W
.
Uwaga: jeśli warunek
W
nie zależy od zmian stanu powstających na
skutek wykonania instrukcji
I
to iteracja taka może być nieskończona
(co świadczy o błędzie logicznym)
dopóki W wykonuj I
Instrukcja
I
jest powtarzana tyle razy, ile można, nie naruszając
prawdziwości warunku
W
.
Instrukcje
wejścia/wyjścia
czytaj(N)
Wykonanie instrukcji wejścia polega na odczytaniu z urządzenia
zewnętrznego (plik, klawiatura) tylu znaków binarnych, ile trzeba , aby
uzyskać ciąg kodowy wartości obiektu należącego do ustalonej klasy.
Klasa obiektu jest znana z deklaracji nazwy
N
; mówimy też, że nazwa
N stanowi
parametr
instrukcji wejścia .
pisz(W)
Wykonanie instrukcji wyjścia polega na znalezieniu wartości wyrażenia
W i wydaniu jej na zewnątrz w kodzie i postaci obowiązującej dla
konkretnego urządzenia wyjściowego.
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
5
Deklarowanie jako procedury
czynności wykonywanych
wielokrotnie i różniących się
między sobą co najwyżej
wartościami ułatwia i
upraszcza zapis algorytmu.
Stosowanie procedur ułatwia
układanie algorytmów – w
trakcie ich pisania możemy
początkowo jedynie nazywać
pewne czynności i określić ich
parametry, pozostawiając na
później deklarację tychże
procedur.
Przykład zapisu algorytmu wyliczania silni z liczby naturalnej:
początek
całkowite
liczba, silnia, i;
i := 1
silnia := 1
czytaj(liczba)
dopóki
i<=
liczba wykonuj początek
i:=i+1
;
silnia := silnia*i
koniec
pisz (silnia)
koniec
Procedury
Procedury
Procedury
Procedury
Wyodrębnioną (zwykle ze względu na wielokrotne użycie w różnych
miejscach) część algorytmu, posiadającą jednoznaczną nazwę ustalony
sposób wymiany informacji z pozostałymi częściami algorytmu
nazywamy procedurą. Procedurę opisuje się przy pomocy deklaracji,
stosuje zaś przez wywołanie. Raz zdeklarowaną procedurę można
wywoływać w dowolnie wielu miejscach algorytmu.
Deklaracja procedury składa się z nagłówka i treści. Nagłówek
procedury ma postać:
procedura
procedura
procedura
procedura
P
(
W
);
S
;
gdzie:
P
jest
nazwą
procedury ,
W
– wykazem
parametrów formalnych
, a
S – specyfikacją
parametrów formalnych. Wykaz parametrów formalnych
jest listą nazw parametrów formalnych, zaś specyfikacja opisem ich
własności.
Parametr
formalny
jest
obiektem, który występuje w treści
procedury; w chwili użycia procedury
każdemu
parametrowi
formalnemu
zostaje
przyporządkowany
parametr
aktualny
- obiekt algorytmu, który
zastępuje odpowiadający mu parametr
formalny w treści procedury. Rodzaj
parametru aktualnego musi być zgodny
ze specyfikacją odpowiadającego mu
parametru formalnego.
Treść procedury ma taką postać, jak
instrukcja
(złożona
lub
prosta).
Występują w niej obiekty dwu rodzajów:
parametry formalne zastępowane w
chwili
wywołania
procedury
przez
parametry aktualne oraz obiekty lokalne
– zadeklarowane w treści procedury.
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
6
Wywołanie procedury w algorytmie ma postać:
P
(
WA
)
gdzie:
P
jest
nazwą
procedury ,
WA
– wykazem parametrów aktualnych,
zgodnym co do liczby z wykazem
W
parametrów formalnych w deklaracji
procedury. Wykonanie wywołanej procedury polega na wykonaniu z
parametrami aktualnymi instrukcji tworzących ich treść.
Przykład użycia procedury w algorytmie wyliczającym sumę silni
trzech liczb naturalnych:
początek całkowite
x; y; z; xs; ys; zs; suma;
procedura
silnia(liczba, wynik);
całkowite
liczba;
całkowite
wynik;
początek
całkowite
i;
i := 1
wynik:= 1
dopóki
i<=
liczba wykonuj początek
i:=i+1
;
wynik:= wynik*i
koniec
czytaj(x); czytaj(y), czytaj (z)
silnia(x, xs)
silnia(y,ys)
silnia(x, zs)
suma := xs+ys+zs
pisz(suma)
koniec
koniec
Kolejnym ułatwieniem jest użycie procedur funkcyjnych, w przypadku
których nazwa pełni podwójną rolę: jako nazwa procedury i jako nazwa
obiektu, uzyskującego określoną wartość na skutek wykonania procedury.
Deklarację procedury funkcyjnej poprzedzamy określeniem typu wartości,
które przyjmuje obiekt nazwany tak samo jak procedura. W treści
procedury musi wystąpić co najmniej jedna instrukcja przypisania z
nazwą procedury po lewej stronie znaku :=
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
7
Poniżej przykład użycia procedury funkcyjnej.
początek całkowite
x; y; z; xs; ys; zs; suma;
całkowite procedura
silnia(liczba);
całkowite
liczba;
początek
całkowite
i;
i := 1
silnia := 1
dopóki
i<=
liczba wykonuj początek
i:=i+1
;
silnia := silnia*i
koniec
koniec
czytaj(x); czytaj(y), czytaj (z)
suma := silnia(x)+silnia(y)+silnia(z)
pisz(suma)
koniec
Modularyzacja algorytmów
Modularyzacja algorytmów
Modularyzacja algorytmów
Modularyzacja algorytmów
Modularyzacja algorytmów to technika układania algorytmów
polegająca na wyodrębnieniu w algorytmie możliwie niezależnych części –
modułów, z których każdy opisuje dobrze opisane czynności na dobrze
opisanych obiektach przy jednoczesnym ustaleniu zasad łączenia takich
części w spójną całość.
Własności modułów:
I.
Semantyczn
Semantyczn
Semantyczn
Semantyczna
a
a
a nieza
nieza
nieza
niezależność
leżność
leżność
leżność modułów.
modułów.
modułów.
modułów. Moduł algorytmu opisuje
dobrze opisane czynności na dobrze opisanych obiektach, co
oznacza że sens modułu możemy zinterpretować niezależnie od
pozostałych części algorytmu. Zatem jeśli w danym algorytmie
wymienimy wskazany moduł na inny ale o identycznym znaczeniu
(interpretacji), całość algorytmu nie zmieni znaczenia.
II.
Syntaktyczna niezależność
Syntaktyczna niezależność
Syntaktyczna niezależność
Syntaktyczna niezależność modułów.
modułów.
modułów.
modułów. Moduły algorytmu łączą się w
całość
zgodnie
z
ustalonymi
regułami
określającymi
współzależności i współdziałanie poszczególnych modułów, zatem
reguły budowy wewnętrznej indywidualnych modułów mogą być
różne, co np. pozwala stosować różne konwencje notacji dla
poszczególnych modułów (przypadek kilku autorów algorytmu).
III.
Zasada abstrakcji danych.
Zasada abstrakcji danych.
Zasada abstrakcji danych.
Zasada abstrakcji danych. Ze względu na semantyczną i
syntaktyczną niezależność modułów interpretacja przekazywanych
informacji nie może być zależna od interpretacji obowiązującej
wewnątrz modułów.
Patrząc na moduł z zewnątrz, możemy traktować go jako spójną
całość; nie wnikając w szczegóły poprzestajemy na stwierdzeniu że jest to
opis czynności mających w określonych warunkach określone skutki.
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
8
Języki programowania są
głównym narzędziem
programisty; aby odpowiednio
wykorzystać narzędzie, należy
je najpierw w pełni zrozumieć.
(Marcotty, i inni, 1991)
Można powiedzieć, że modularyzacja
służy do ukrywania zbędnych informacji:
dla obserwatora z zewnątrz modułu będą
to szczegóły realizacji czynności w
module, z punktu widzenia wnętrza
modułu będą to informacje dotyczące
wszystkich innych modułów.
J
J
J
J
ĘZYK
ĘZYK
ĘZYK
ĘZYK PROGRAMOWANIA
PROGRAMOWANIA
PROGRAMOWANIA
PROGRAMOWANIA
Co to jest język programowania?
Co to jest język programowania?
Co to jest język programowania?
Co to jest język programowania?
Język programowania
jest zbiorem konwencji umożliwiających
komunikatywność algorytmów zarówno dla programistów jak i dla
komputerów.
Programem
nazywamy algorytm wyrażony w języku
programowania (Marcotty, i inni, 1991).
Implementacją
nazywamy
realizację języka programowania jako systemu komputerowego, która
może przyjąć jedną z dwóch form:
kompilacji
lub
interpretacji.
• Kompilacja
Kompilacja
Kompilacja
Kompilacja: program napisany w języku programowania (
program
źródłowy)
jest tłumaczony na równoważny program (
program
wynikowy
) w języku maszynowym tego komputera (maszyny
docelowej), na którym ma być wykonany.
• Interpretacja
Interpretacja
Interpretacja
Interpretacja: program źródłowy nie jest tłumaczony, ale jest
wykonywany
bezpośrednio
przez
interpretator
–
program
wykonywany na maszynie docelowej. Interpretacja każdej instrukcji
polega na jej sprawdzeniu i wykonaniu operacji przez nią
specyfikowanych.
W uczeniu się języków programowania należy uwzględnić następujące
podstawowe aspekty języków formalnych, do jakich należą: składnia
(
syntaktyka
) języka, sensowność zdań jakiegoś języka (
semantyka
) oraz
zalecenia dotyczące używania różnych poprawnych form lingwistycznych
o zbliżonym znaczeniu semantycznym (
pragmatyka
).
• Formalna składnia języka
Formalna składnia języka
Formalna składnia języka
Formalna składnia języka to zbiór reguł, które pozwalają generować
syntaktycznie poprawne zdania rozważanego języka. W przypadku
języków programowania znajomość składni umożliwia zapisanie
konstrukcji złożonych z symboli elementarnych danego języka –
łańcuchów symboli – które nazywamy
programami poprawnymi
syntaktycznie
.
• Tylko niewielka część programów poprawnych syntaktycznie może
być wykonana poprawnie, jako że reguły składniowe nie dotyczą akcji
zachodzących podczas wykonywania programów. Reguły semantyczne
Reguły semantyczne
Reguły semantyczne
Reguły semantyczne
języka
języka
języka
języka definiują podzbiór programów poprawnych; są podawane na
ogół nieformalnie.
• Pragmatyka języka
Pragmatyka języka
Pragmatyka języka
Pragmatyka języka obejmuje zalecenia dotyczące używania różnych
poprawnych
form
lingwistycznych
o
zbliżonym
znaczeniu
semantycznym: dotyczy wyboru między uformowanymi już zdaniami.
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
9
Przykład zapisu fragmentu programu w języku VBA, który choć
poprawny syntaktycznie to zawiera błąd semantyczny (jest semantycznie
błędny).
K = 0
V = 3 / K
Twierdzenie Boehma
Twierdzenie Boehma
Twierdzenie Boehma
Twierdzenie Boehma---- Jacopiniego o strukturach sterujących
Jacopiniego o strukturach sterujących
Jacopiniego o strukturach sterujących
Jacopiniego o strukturach sterujących
Podstawowe struktury sterujące
Podstawowe struktury sterujące
Podstawowe struktury sterujące
Podstawowe struktury sterujące
Do definicji ciągu wykonywanych instrukcji służą takie narzędzia
języka programowania jak pętle (iteracje), instrukcje warunkowe,
instrukcje skoku.
W analizie przekazywania sterowania jest wygodnie przedstawić
program w postaci schematu blokowego. Schemat blokowy to zbiór
wierzchołków oznaczających akcje programu połączonych drogami z
zaznaczonym kierunkiem, które pokazują przepływ sterowania. Schemat
blokowy reprezentuje ciąg, w którym wykonywane są akcje programu
(Marcotty, i inni, 1991). Rozróżniamy trzy rodzaje wierzchołków:
•
Akcje podstawowe
– reprezentowane przez prostokąty. Oznaczają
akcje które mogą zmienić wartość zmiennych, ale nie mogą zmienić
sterowania. Mają tylko jedną drogę wyjściową.
•
Warunki
- reprezentowane są przez romby, które mogą zmienić
sterowanie, ale nie mogą zmienić wartości zmiennych. Z warunku
wychodzą dwie drogi ilustrujące binarny wybór sterowania.
•
Połączenia
– odpowiadają im miejsca połączeń dwóch dróg. Nie
oznaczają żadnych akcji, a więc nie mogą zmienić wartości zmiennych
i mają tylko jedną drogę wyjściową.
D
D
D
D----struktury
struktury
struktury
struktury
Bruno i Steiglitz (1972) zdefiniowali klasę prostych struktur
sterujących, zwanych D-strukturami (D – od nazwiska Dijkistra).
D- strukturą jest:
•
Akcja podstawowa
– instrukcja przypisania, wywołanie procedury,
instrukcja wejścia lub wyjścia lub jeden z następujących elementów, z
których każdy jest kompozycją D-struktur:
•
Ciąg
s
1
s
2
… s
n
gdzie s
1
do s
n
są D-strukturami
•
Struktura warunkowa
if c then
s
1
else
s
2
end if
gdzie c jest warunkiem, a
s
1
s
2
są
D-strukturami.
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
10
•
Struktura iteracyjna
while c loop
s
end loop
gdzie c jest warunkiem, a
ssss
jest D-strukturą.
Program skonstruowany wyłącznie z D-struktur jest też D-strukturą.
Na rysunku poniżej przedstawiono schematy blokowe D-struktur.
Rysunek 1. Schematy blokowe D-struktur. Źródło: (Marcotty, i inni, 1991)
Twierdzenie
Twierdzenie
Twierdzenie
Twierdzenie
Twierdzenie Boehma
Twierdzenie Boehma
Twierdzenie Boehma
Twierdzenie Boehma ----Jacopiniego
Jacopiniego
Jacopiniego
Jacopiniego (1966) mówi nam, że D-struktury
wystarczają do konstrukcji dowolnego programu. Dowód tego twierdzenia
przedstawił Mills (1972). Podstawowa konkluzja twierdzenia jest
następująca:
Dla dowolnego programu istnieje ekwiwalentny program,
który jest D-strukturą.
Dowolny program oznacza tutaj program komputerowy spełniający
następujące warunki:
1.
Istnieje dokładnie jedno wejście i jedno wyjście z programu.
2.
Dla każdego wierzchołka w schemacie blokowym programu istnieje co
najmniej jedna droga prowadząca od wejścia do programu przez ten
wierzchołek do wyjścia z programu.
Programowanie
© Sławomir Luściński. Politechnika Świętokrzyska 2008
Ekwiwalentnym programem nazywamy
identycznych danych wejściowych daje takie same wyniki jak program
wyjściowy, dla wszystkich możliwych wartości danych wejściowych.
Dowód istnienia ekwiwalentnego programu polega na podaniu k
kroków konstrukcji schematu blokowego D
ekwiwalentny ze schematem blokowym oryginalnego programu, przy
czym może on zawierać akcje, warunki i zmienne, które nie występowały
w oryginalnym programie.
Zatem jeśli w jeżyku progra
jeśli w jeżyku progra
jeśli w jeżyku progra
jeśli w jeżyku progra
typu D
typu D
typu D
typu D----struktur lub inne równoważne, to teoretycznie jest to
struktur lub inne równoważne, to teoretycznie jest to
struktur lub inne równoważne, to teoretycznie jest to
struktur lub inne równoważne, to teoretycznie jest to
wystarczający zbiór do zaprogramowania dowolnego problemu.
wystarczający zbiór do zaprogramowania dowolnego problemu.
wystarczający zbiór do zaprogramowania dowolnego problemu.
wystarczający zbiór do zaprogramowania dowolnego problemu.
P
P
P
P
ROCES PROGRAMOWANIA
ROCES PROGRAMOWANIA
ROCES PROGRAMOWANIA
ROCES PROGRAMOWANIA
Typy danych
Typy danych
Typy danych
Typy danych
Rysunek poniżej ilustruje proces programowania.
Rysunek 2. Proces programowania.
Problemem do rozwiązania jest algorytm występujący w rzeczywistym
świecie i działający na rzeczywistych obiektach.
na opisaniu w języku programowania komputerowego modelu
rzeczywistego algorytmu. Aby utworzyć model algorytmu, programista
musi wybrać reprezentację obiektów dopuszczalnych w danym języku
programowania; konsekwencją tego wyboru jest zbiór operacji, które może
wykonać na modelu. Wszystkie operacje dopuszczalne na obiektach
modelu w języku programowania powinny mieć sens w świecie
rzeczywistym. Stąd w językach programowania występowanie pojęcia
typu,
które definiuje się w następujący sposób:
Typ jest zbiorem obiek
w sensowny sposób przekształcać te obiekty.
Wersja:
Sławomir Luściński. Politechnika Świętokrzyska 2008
programem nazywamy
taki program, który dla
identycznych danych wejściowych daje takie same wyniki jak program
wyjściowy, dla wszystkich możliwych wartości danych wejściowych.
Dowód istnienia ekwiwalentnego programu polega na podaniu k
kroków konstrukcji schematu blokowego D-struktury, który jest
ekwiwalentny ze schematem blokowym oryginalnego programu, przy
czym może on zawierać akcje, warunki i zmienne, które nie występowały
w oryginalnym programie.
jeśli w jeżyku progra
jeśli w jeżyku progra
jeśli w jeżyku progra
jeśli w jeżyku programowania dostępne są instrukcje sterujące
mowania dostępne są instrukcje sterujące
mowania dostępne są instrukcje sterujące
mowania dostępne są instrukcje sterujące
struktur lub inne równoważne, to teoretycznie jest to
struktur lub inne równoważne, to teoretycznie jest to
struktur lub inne równoważne, to teoretycznie jest to
struktur lub inne równoważne, to teoretycznie jest to
wystarczający zbiór do zaprogramowania dowolnego problemu.
wystarczający zbiór do zaprogramowania dowolnego problemu.
wystarczający zbiór do zaprogramowania dowolnego problemu.
wystarczający zbiór do zaprogramowania dowolnego problemu.
ROCES PROGRAMOWANIA
ROCES PROGRAMOWANIA
ROCES PROGRAMOWANIA
ROCES PROGRAMOWANIA
Rysunek poniżej ilustruje proces programowania.
Proces programowania. Źródło:
(Marcotty, i inni, 1991)
Problemem do rozwiązania jest algorytm występujący w rzeczywistym
działający na rzeczywistych obiektach. Programowanie polega
saniu w języku programowania komputerowego modelu
rzeczywistego algorytmu. Aby utworzyć model algorytmu, programista
musi wybrać reprezentację obiektów dopuszczalnych w danym języku
; konsekwencją tego wyboru jest zbiór operacji, które może
konać na modelu. Wszystkie operacje dopuszczalne na obiektach
modelu w języku programowania powinny mieć sens w świecie
rzeczywistym. Stąd w językach programowania występowanie pojęcia
definiuje się w następujący sposób:
Typ jest zbiorem obiektów i operacji, którymi można
w sensowny sposób przekształcać te obiekty.
Wersja: 2008-11-19
11
taki program, który dla
identycznych danych wejściowych daje takie same wyniki jak program
wyjściowy, dla wszystkich możliwych wartości danych wejściowych.
Dowód istnienia ekwiwalentnego programu polega na podaniu kolejnych
struktury, który jest
ekwiwalentny ze schematem blokowym oryginalnego programu, przy
czym może on zawierać akcje, warunki i zmienne, które nie występowały
mowania dostępne są instrukcje sterujące
mowania dostępne są instrukcje sterujące
mowania dostępne są instrukcje sterujące
mowania dostępne są instrukcje sterujące
struktur lub inne równoważne, to teoretycznie jest to
struktur lub inne równoważne, to teoretycznie jest to
struktur lub inne równoważne, to teoretycznie jest to
struktur lub inne równoważne, to teoretycznie jest to
wystarczający zbiór do zaprogramowania dowolnego problemu.
wystarczający zbiór do zaprogramowania dowolnego problemu.
wystarczający zbiór do zaprogramowania dowolnego problemu.
wystarczający zbiór do zaprogramowania dowolnego problemu.
(Marcotty, i inni, 1991)
Problemem do rozwiązania jest algorytm występujący w rzeczywistym
Programowanie polega
saniu w języku programowania komputerowego modelu
rzeczywistego algorytmu. Aby utworzyć model algorytmu, programista
musi wybrać reprezentację obiektów dopuszczalnych w danym języku
; konsekwencją tego wyboru jest zbiór operacji, które może
konać na modelu. Wszystkie operacje dopuszczalne na obiektach
modelu w języku programowania powinny mieć sens w świecie
rzeczywistym. Stąd w językach programowania występowanie pojęcia
tów i operacji, którymi można
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
12
Paradoks Wynalazcy:
bardziej ogólny problem
może być prostszy.
Polya, 1964
Zasady programowania
Zasady programowania
Zasady programowania
Zasady programowania
Oto wybrane zasady zalecane do stosowania w procesie
programowania (Bentley, 1992)
•
Właściwe zrozumienie
problemu
. Znajomość i zrozumienie kontekstu,
w jakim pojawił się problem.
•
Określ abstrakcyjny problem
. Przejrzyste, lapidarne sformułowanie
problemu pomaga nam ten problem rozwiązać, a następnie to samo
rozwiązanie zastosować do innych
zadań. Napisanie ogólnego programu
dla N przypadków może się okazać
łatwiejsze, niż napisanie programu dla
ograniczonej liczby przypadków. Warto
tu przytoczyć Edwarda de Bono który
zwraca uwagę na fakt, że „poprawnego
określenie problemu możemy dokonać
jedynie z perspektywy znalezionego rozwiązania” (de Bono, 1998).
Ponieważ jest mało prawdopodobne, abyśmy znaleźli najlepszą
definicję, należy szukać określeń alternatywnych.
•
Zbadaj przestrzeń rozwiązań.
Nie należy przystępować do
programowania w oparciu o pierwszy pomysł rozwiązania problemu,
jaki przychodzi nam do głowy. Badając przestrzeń rozwiązań, należy
zadać sobie pytanie: jak moglibyśmy rozwiązać to samo zadanie w
inny sposób.
•
Spojrzenie wstecz.
„Zawsze pozostaje coś do zrobienia, przy
odpowiedniej dozie namysłu i dociekań moglibyśmy poprawić każdy
projekt, a w każdym razie możemy pogłębić nasze zrozumienie
mechanizmów rozwiązania” (Polya, 1964)
W
rozwiązywaniu
problemów
związanych
z
zadaniami
programistycznymi
szczególnie
przydatne
może
być
zalecenie
pokonywania blokad koncepcyjnych rozumianych jako „powstałe w
umyśle tamy, które odgradzają rozwiązującego pewien problem od
właściwego postrzegania tego problemu, czy też poszukiwania”.
Rysunek 3. Rozwiązanie problemu. Źródło:
(de Bono, 1998)
Rysunek powyżej zaczerpnięty z (de Bono, 1998) przedstawia
rozwiązanie określonego problemu i dokładnie określony punkt wyjścia.
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
13
Wszystko należy robić w
sposób tak prosty, jak to tylko
możliwe i ani trochę prościej
Albert Enstein
Pomiędzy nimi znajduje się obszar nieokreśloności, w którym należy
wytyczyć drogę od punktu wyjścia do rozwiązania.
„Rozwiązanie problemu może wymagać idei w takim samym stopniu jak
informacji… Zajmując się jakimś problemem, dobrze jest zebrać jak
najwięcej danych i stwierdzić, czy rozwiązanie będzie zależeć od
uzyskania większej liczby informacji, czy od nowej idei.”
Programy podpo
Programy podpo
Programy podpo
Programy podporządkowane strukturom danych
rządkowane strukturom danych
rządkowane strukturom danych
rządkowane strukturom danych
Właściwie dobrane do problemu
struktury
danych
umożliwiają
w
konsekwencji
uproszczenie
zadania
programistycznego polegającego na
sprowadzeniu dużych programów do
małych (Bentley, 1992) . Zalecenia dla
programisty w odniesieniu do struktur
danych formułuje się następująco:
• Przekształć powtarzający się kod w tablice. Długie ciągi podobnych do
siebie instrukcji często najlepiej jest wyrazić w najprostszej
strukturze danych, tzn. w tablicy.
• Zapoznaj się z bardziej złożonymi strukturami danych.
• Pozwól, by dane określały strukturę programu. Dane mogą narzucić
programowi kształt pozwalający zastąpić skomplikowany kod
odpowiednią strukturą danych.
Przed napisaniem kodu dobrzy programiści starannie analizują
wejście i wyjście oraz pośrednie struktury danych, na których opierają się
ich programy.
Niezawodność
Niezawodność
Niezawodność
Niezawodność oprogramowania
oprogramowania
oprogramowania
oprogramowania
Glenford J. Myers w swojej książce poświęconej niezawodności
oprogramowania pisze: „
błędy są wrodzoną własnością programów…
Możemy wykryć pewne błędy , takie jak nieskończona pętla, lecz z racji
pierwotnej natury błędów oprogramowania nigdy nie wykryjemy ich
wszystkich
(Myers, 1980)
.
Definicja błędu oprogramowania
w
edług
Myers’a jest następująca:
Błąd
oprogramowania
występuje
wówczas,
gdy
oprogramowanie
nie
spełnia
sensownych
oczekiwań
użytkownika. Awaria oprogramowania jest to wystąpienie
błędu oprogramowania.
Niezawodność oprogramowania jest funkcją wpływu błędów na
użytkowników systemu, przy czym niekoniecznie odzwierciedla wielkość
błędu wewnątrz systemu. Myres podaje przykład fiaska bezzałogowej
wyprawy na Wenus z powodu braku przecinka w instrukcji pętli
programu. Definicja niezawodności oprogramowania jest następująca:
Niezawodność oprogramowania jest prawdopodobieństwem,
że oprogramowanie działa bez awarii w określonym przedziale
czasu, opatrzonym wagą odpowiadającą kosztom poniesionym
przez użytkownika z powodu każdej zaistniałej awarii.
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
14
Niezawodność nie jest wrodzoną cechą programu i zależy przede
wszystkim od sposobu użycia programu. Przez
prawdopodobieństwo
w
powyższej definicji należy rozumieć prawdopodobieństwo nie wystąpienia
zdarzenia polegającego na wprowadzenia przez użytkownika zestawu
danych wejściowych do programu, który powoduje awarię systemu.
Proces budowy oprogramowania można przedstawić jako ciąg
czynności poczynając od sformułowania problemu, a kończąc na
obszernym zestawie szczegółowych instrukcji sterujących komputerem w
trakcie wykonywania programu. Budowa programu polega na dokonaniu
„
pewnej liczby przekładów informacji,
tłumaczących problem początkowy
na różne rozwiązania pośrednie, aż do otrzymania szczegółowego kodu
maszynowego.”
Zatem:
Główną przyczyną błędów oprogramowania są błędy w
tłumaczeniu informacji.
Rysunek poniżej przedstawia makroskopowy model tłumaczenia
występujący w procesie budowy oprogramowania.
Rysunek 4. Model makroskopowy. Źródło: opracowanie własne na podst. (Myers, 1980)
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
15
Etapy programowania:
I.
Wymagania. Opis rozwiązywanego problemu, ma zwykle postać
wymagań użytkownika.
II.
Tłumaczenie wymagań użytkownika na język założeń dla
budowanego programu.
III.
Przekształcenie założeń w specyfikacje zewnętrzne precyzyjnie
opisujące zachowanie całości systemu z punktu widzenia
użytkownika.
IV.
Tłumaczenie opisu zewnętrznego na strukturę składowych
oprogramowania (np. modułów) i przetłumaczenie każdej z tych
składowych na opis kroków proceduralnych (np. schematy blokowe)
V.
Przełożenie logicznej specyfikacji oprogramowania na język
programowania.
Pętle sprzężenia zwrotnego:
VI.
Jako wynik przedsięwzięcia programistycznego uzyskujemy sam
program oraz jego dokumentację. Dokumentacja – określana jako
publikacje – powstaje jako translacja specyfikacji zewnętrznych na
informacje i dyrektywy przeznaczonego dla określonego typu
użytkownika.
VII.
Bezpośrednie współdziałanie użytkownika z programem, które
uwarunkowane jest sposobem zaprojektowania i wykonania
interfejsu użytkownika.
VIII.
Czytanie i rozumienie istniejących już tekstów programów dotyczy
zarówno pielęgnacji oprogramowania (usuwania błędów) jak i jego
modyfikacji (wzbogacania o nowe funkcje)
Programowanie
Wersja: 2008-11-19
© Sławomir Luściński. Politechnika Świętokrzyska 2008
16
B
B
B
B
IBLIOGRAFIA
IBLIOGRAFIA
IBLIOGRAFIA
IBLIOGRAFIA
1.
Bazewicz, Mieczysław. 1993.
Bazewicz, Mieczysław. 1993.
Bazewicz, Mieczysław. 1993.
Bazewicz, Mieczysław. 1993.
Wstęp do systemów informatycznych i
reprezentacji wiedzy.
Wrocław : Wydawnictwo Politechniki
Wrocławskiej, 1993.
2.
Bentley, Jon. 1992.
Bentley, Jon. 1992.
Bentley, Jon. 1992.
Bentley, Jon. 1992.
Perełki oprogramowania.
Warszawa :
Wydawnictwa Naukowo-Techniczne, 1992.
3.
de Bono,
de Bono,
de Bono,
de Bono, Edward. 1998.
Edward. 1998.
Edward. 1998.
Edward. 1998.
Atlas myślenia dla menadżera.
Warszawa :
Wydawnictwo Medium, 1998.
4.
Kisielnicki, Jerzy i Sroka, Henryk. 2005.
Kisielnicki, Jerzy i Sroka, Henryk. 2005.
Kisielnicki, Jerzy i Sroka, Henryk. 2005.
Kisielnicki, Jerzy i Sroka, Henryk. 2005.
Systemy informatyczne
biznesu.
III uzupełnione i zmienione. Warszawa : Wydawnictwo
PLACET, 2005.
5.
Marcotty, Michael i Ledgard, Henry.
Marcotty, Michael i Ledgard, Henry.
Marcotty, Michael i Ledgard, Henry.
Marcotty, Michael i Ledgard, Henry. 1991.
1991.
1991.
1991.
W kręgu języków
programowania.
Warszawa : Wydawnictwa Naukowo-Techniczne,
1991.
6.
Myers, Glenford J. 1980.
Myers,
Glenford
J.
1980.
Myers,
Glenford
J.
1980.
Myers,
Glenford
J.
1980.
Projektowanie
niezawodnego
oprogramowania.
Warszawa : Wydawnictwa Naukowo-Techniczne,
1980.
7.
Turski, Władysław M. 1989.
Turski,
Władysław
M.
1989.
Turski,
Władysław
M.
1989.
Turski,
Władysław
M.
1989.
Propedeutyka informatyki.
Warszawa : PWN, 1989.
8.
—
—
—
—. 1979.
. 1979.
. 1979.
. 1979.
Propedeutyka informatyki.
Warszawa : Państwowe
Wydawnictwo Naukowe, 1979.