Microsoft PowerPoint - IwZ_5.ppt [tryb zgodno\234ci]

Transkrypt

Microsoft PowerPoint - IwZ_5.ppt [tryb zgodno\234ci]
Wstęp do informatyki
Programowanie komputerów PC
Cezary Bolek
[email protected]
Uniwersytet Łódzki
Wydział Zarządzania
Katedra Informatyki
Program komputera
Komputer jest maszyną wykonującą polecenia odczytywane z pamięci
operacyjnej (instrukcje procesora – kod programu)
Instrukcje procesora dotyczą prostych operacji na rejestrach
wewnętrznych oraz odczycie i zapisie komórek pamięci.
Interakcja maszyny z uŜytkownikiem odbywa się poprzez urządzenia
we/wy, które zamieniają sygnały wysyłane przez człowieka i zamieniają je
na postać cyfrową i odwrotnie.
CPU
ROM, RAM
ALU
Rejestry
procesora
In/Out
Wstęp do informatyki
Cezary Bolek <[email protected]>
2
Język maszynowy
Instrukcja procesora (kod programu) w pamięci
zapisane są w postaci liczb dwójkowych.
Zapis programu za pomocą liczb, które mogą być
bezpośrednio wykonywane przez maszyną nazywa
się językiem maszynowym.
Pamięć operacyjna
ROM + RAM
np.
01001000
00001000
11001010
00001011
11111110
48h
08h
CAh
0Bh
FEh
..., 48, 08, CA, 0B, FE, ...
Pisanie programów w języku maszynowym przez
człowieka jest bardzo Ŝmudne, ale było stosowane
do programowania komputerów I i II generacji.
Wstęp do informatyki
Cezary Bolek <[email protected]>
3
1
Język asemblera
KaŜdej instrukcji procesora (która moŜe zajmować jeden lub więcej bajtów)
moŜna przypisać skrót literowy (mnemonik), a kaŜdemu rejestrowi nazwę.
Zapis programu za pomocą mnemoników nazywa się językiem asemblera,
który jest znacznie łatwiejszy do opanowania przez człowieka.
np.
48h
08h
CAh
0Bh
FEh
...
MOV BL,8
ADD BL,B
INC
BL
...
MOV BL,8
ADD BL,B
INC BL
Program zapisany w języku asemblera nie moŜe być wykonywany
bezpośrednio przez komputer i wymaga tłumaczenia na kod maszynowy
za pomocą programu zwanego asemblerem.
PoniewaŜ istnieje ścisły związek pomiędzy mnemonikami a instrukcjami
maszynowymi, proces tłumaczenia (asemblacja) jest stosunkowo prosty.
Proces odwrotny nazywa się deasemblacją (za pomocą disasemblera).
...
MOV BL,8
ADD BL,B
INC
BL
...
Asembler
..., 48, 08, CA, 0B, FE, ...
Wstęp do informatyki
Cezary Bolek <[email protected]>
4
Języki wysokiego poziomu
Program zapisany w języku wysokiego poziomu charakteryzuje:
• Abstrakcja danych – programista operuje na „zmiennych” bez konieczności
organizacji wykorzystania rejestrów procesora i lokalizacji liczb w pamięci
• ZłoŜone struktury danych – proste jest deklarowanie i korzystanie ze
złoŜonych struktur liczb jak np. tablice (macierze), stosy, kolejki, drzewa, etc.
• Zaawansowane konstrukcje sterujące – określenie kolejności wykonywania
programu realizuje się z pomocą intuicyjnych konstrukcji warunkowych
typu IF-THEN-ELSE, FOR, DO-WHILE, etc.
• Dowolność układu zapisu programu – programista moŜe zapisywać program
w postaci najbardziej dla niego czytelnej i zgodnej z upodobaniami.
...
for (i=1; i<10, i++)
{
n=10+x*2
};
...
...
for (i=1; i<10, i++)
{ n=10+x*2 };
...
...
for (i=1; i<10, i++) { n=10+x*2 };
...
Wstęp do informatyki
Cezary Bolek <[email protected]>
5
Kompilacja programów
Programy napisane w językach wysokiego poziomu muszą być tłumaczone
na język maszynowy za mocą programu zwanego kompilatorem,
a proces tłumaczenia nazywa się kompilacją.
...
for (i=1; i<10, i++)
{ n=10+x*2 };
...
Kompilator
..., 48, 08, CA, 0B, FE, ...
...
MOV BL,8
ADD BL,B
INC
BL
...
Kompilacja programów jest zadaniem bardzo złoŜonym, ze względu na
mnogość moŜliwości realizacji zadania w języku asemblera.
Kompilatory są jednymi z najbardziej zaawansowanych i złoŜonych
programów dla komputerów osobistych.
X = X + Y*Z
Wstęp do informatyki
MOV
MOV
MOV
MUL
ADD
MOV
AL,X
BL,Y
CL,Z
CL,BL
AL,CL
X,AL
lub
MOV
MOV
MUL
MOV
ADD
MOV
AL,Y
BL,Z
AL,BL
BL,X
AL,BL
X,AL
lub
MOV
MUL
ADD
MOV
AL,Z
AL,Y
CL,X
X,AL
Cezary Bolek <[email protected]>
6
2
Przykład - algorytm Euklidesa
Znajdowanie największego wspólnego podzielnika
Największy Wspólny Dzielnik (NWD) dwóch liczb jest największą
liczbą naturalną spośród tych, które dzielą obie te liczby bez reszty
Np. NWD(24,18) = 6.
NWD(24,15)
Aby znaleźć Największy Wspólny Dzielnik dwóch liczb, to od
większej liczby naleŜy odejmować mniejszą dotąd, aŜ obie liczby
będą sobie równe. Wynik jest ich największym wspólnym
podzielnikiem.
24 - 15 = 9
Od większej liczby odejmujemy mniejszą. Liczby 24 i 15 przechodzą w 15 i 9.
PoniewaŜ nie są one równe, wykonujemy dalej odejmowanie
15 - 9 = 6
Teraz otrzymujemy parę 9 i 6, która dalej nie składa się z liczb sobie
równych, więc kontynuujemy odejmowanie.
9-6=3
Para 6 i 3 - odejmujemy dalej
6-3=3
Para 3 i 3 - otrzymaliśmy równość, więc liczba 3 jest największym wspólnym
podzielnikiem liczb 24 i 15.
Wstęp do informatyki
Cezary Bolek <[email protected]>
7
Przykład - algorytm Euklidesa
Lista kroków
K01: Czytaj a,b
K02: Dopóki a ≠ b: wykonuj krok K03
K03: JeŜeli a > b, to a ← a - b. Inaczej b ← b – a
K04: nwd ← a
K05: Zakończ algorytm
Schemat blokowy
Wstęp do informatyki
Cezary Bolek <[email protected]>
8
Algorytm Euklidesa – kod maszynowy i asembler
b9 18 00 00 00 b8 0f 00 00 00 3b c8 7e 04 2b c8 eb 02 2b
c1 3b c8 75 f4 33 c0 c3
b9 18 00 00 00
b8 0f 00 00 00
3b c8
7e 04
2b c8
eb 02
2b c1
3b c8
75 f4
33 c0
c3
Wstęp do informatyki
$L591:
$L584:
$L585:
mov
mov
cmp
ecx, 24
eax, 15
ecx, eax
jle
sub
jmp
SHORT $L584
ecx, eax
SHORT $L585
sub
eax, ecx
cmp
jne
xor
ret
ecx, eax
SHORT $L591
eax, eax
0
Cezary Bolek <[email protected]>
9
3
Od języka wysokiego poziomu do kodu
maszynowego
program Euclide;
var
begin
end.
m,n : integer;
readln(m);
readln(n);
while m <> n
if m > n then
m := m – n
else
n := n - m;
writeln(m);
$L591:
$L584:
$L585:
mov
mov
cmp
ecx, 24
eax, 15
ecx, eax
jle
sub
jmp
SHORT $L584
ecx, eax
SHORT $L585
sub
eax, ecx
cmp
jne
xor
ret
ecx, eax
SHORT $L591
eax, eax
0
b9 18 00 00 00 b8 0f 00 00 00 3b c8 7e 04 2b c8 eb 02 2b c1 3b c8 75
f4 33 c0 c3
Wstęp do informatyki
Cezary Bolek <[email protected]>
10
Algorytm Euklidesa – Język C i Ada
Język C
Język ADA
with Text_IO;
use Text_IO;
procedure Euklides is
a, b : Integer;
begin
a := 153;
b := 1326;
while (a /= b) loop
if (a > b) then
a := a - b;
else
b := b - a;
end if;
end loop;
int main(int argc, char* argv[])
{
int a,b;
printf("Podaj a.\n");
scanf("%d", &a);
printf("Podaj b.\n");
scanf("%d", &b);
while (a != b){
if (a > b)
a -= b;
else
b -= a;
}
printf("NWD to: %d", a);
return 0;
}
Put_Line("Największy wspólny dzielnik (NWD) to: "
& Integer'Image(b));
end;
Wstęp do informatyki
Cezary Bolek <[email protected]>
11
Kompilatory optymalizujące
Kompilator optymalizujący (optimizing compiler) –
kompilator, który generuje kod maszynowy optymalny pod pewnym
względem, np.szybkości działania lub rozmiaru kodu, korygując
program, tak aby nie wpływało to na wyniki jego działania.
Optymalizacja programu moŜliwa jest równieŜ poprzez optymalne
wykorzystanie zasobów procesora (specyficzne instrukcje, tryby
adresowania, wykorzystanie rejestrów wewnętrznych, etc.)
FOR I:=1 TO 10 DO
BEGIN
FOR J:=1 TO 10 DO
BEGIN
A=I / 100;
B:=A + J / 100;
WRITE(B);
END
END
FOR I:=1 TO 10 DO
BEGIN
A=I / 100;
FOR J:=1 TO 10 DO
BEGIN
B:=A + J / 100;
WRITE(B)
END
END
oryginalny fragment
programu
przyspieszenie poprzez
eliminację niepotrzebnych
obliczeń zmiennej A
Wstęp do informatyki
Cezary Bolek <[email protected]>
12
4
Kompilatory skrośne
Kompilator skrośny (cross-compiler) –
kompilator, który generuje kod maszynowy na inny procesor, niŜ ten
na którym jest uruchomiony.
Kompilatory skrośne uŜywa się do tworzenia oprogramowania dla
systemów komputerowych, w których jest to niemoŜliwe ze względu
na rozmiary, zastosowanie czy wygodę pracy:
telefony komórkowe
palmtopy, notesy elektroniczne, gry elektroniczne, etc.
sprzęt Audio-Video
komputery wbudowane (sterowniki maszyn, ...)
np. JavaME (micro edition) – kompilator programów w języku Java na
telefony komórkowe (java.sun.com)
Wstęp do informatyki
Cezary Bolek <[email protected]>
13
Debugging
Debugging oznacza proces wykrywania błędów w skompilowanych
programach w trakcie ich nadzorowanego uruchamiania.
Nadzorowane uruchamianie programów polega na wykonywaniu
poszczególnych linii programu (praca krokowa) i sprawdzaniu wartości
zmiennych w dowolnym momencie wykonywania.
Program do nadzorowanego uruchamiania nazywa się Debugger’em
Wstęp do informatyki
Cezary Bolek <[email protected]>
14
IDE – zintegrowane środowisko programistyczne
Integrated Develpement Environment (IDE)
edytor + syntax highlighting, bracket matching, macros
kompilator
debugger
Wstęp do informatyki
Cezary Bolek <[email protected]>
15
5
Biblioteki
Biblioteka jest to zebrana razem grupa podprogramów realizujących
określone zadania np. funkcje matematyczne.
Podprogramy biblioteczne, skompilowane do kodu maszynowego, dołączane
są do programu uŜytkownika podczas jego kompilacji.
Proces łączenia plików bibliotecznych ze skompilowanym programem
uŜytkownika nazywa się konsolidacją (linking).
Podprogramy
biblioteczne
Program w języku
wysokiego poziomu
korzystający z funkcji
bibliotecznych
Wstęp do informatyki
Kompilator
Konsolidator
...
x=b*c
a=sin(x)
...
instr1
instr2
CALL SIN
instr4
instr5
STOP
Biblioteka
funkcji
matemat.
instr1
instr2
instr3
powrót
Wykonywalny
program w języku
maszynowym
Kompletny
skonsolidowany
program
Cezary Bolek <[email protected]>
16
Przenośność oprogramowania
Oprogramowanie przenośne (portable) to takie, które moŜna skompilować
i uruchomić pod róŜnymi systemami operacyjnymi, a jego działanie
pozostaje niezmienione (np. Acrobat Reader, Netscape, ...)
Programy w językach wysokiego poziomu są zwykle przenośne, o ile
nie koncentrują się na zaawansowanym wykorzystaniu urządzeń we/wy.
Problem przenośności oprogramowania sprowadza się zwykle do istnienia
przenośnych bibliotek dla języków wysokiego poziomu.
np. www.fox-toolkit.org wieloplatformowa biblioteka graficzna dla języka C++
Wstęp do informatyki
Cezary Bolek <[email protected]>
17
Kompilacja a interpretacja
Wykonanie programu napisanego w języku wysokiego poziomu
moŜe być realizowane na dwa sposoby:
1. kompilacja całego programu, a następnie jego uruchomienie
2. odczytywanie pojedynczych instrukcji języka, kompilacja w locie i
natychmiastowe wykonywanie – tzw. interpretacja (przez interpreter)
(nigdzie nie jest tworzony kod maszynowy całego programu)
Języki programowania moŜna podzielić na dwie kategorie, w zaleŜności
od sposobu wykonywania:
1. języki kompilowane: Fortran, C, C++, Pascal, Delphi, Java (częściowo)
2. języki interpretowane: Basic, Java (częściowo), języki skryptowe: Perl, Tcl
Zalety kompilacji: duŜa szybkość wykonywania programów, moŜliwość
wykonywania się programów bez wspomagania innego oprogramowania.
Zalety interpretacji: szybkie testowanie i modyfikowanie programów (brak
etapu kompilacji), moŜliwość testowanie niekompletnych programów, znaczna
przenośność oprogramowania, istnienie programu tylko w wersji źródłowej.
Wstęp do informatyki
Cezary Bolek <[email protected]>
18
6
Języki programowania
Wstęp do informatyki
Cezary Bolek <[email protected]>
19
Historia języków programowania 1
Plankalkül
(1946, Niemcy)
A-O
(1951, USA)
AutoCode
(1952, Wlk.Brytania)
FORTRAN I
(1957, IBM, USA)
FORTRAN II
(1958, IBM, USA)
Wstęp do informatyki
pierwszy na świecie język programowania
twórca Konrad Zuse, komputer Z3
kmdr. Grace Hopper opracowuje kompilator A-O
znany takŜe pod nazwą AT-3
studentka Alick Glennie opracowuje w ramach studiów
kompilator AutoCode dla komputera Manchester Mark I
rozwinięcie kompilatora A-O; opublikowany pod nazwą
Math-Matic; programy numeryczno-modelujące
rozwinięcie FORTRAN-u I
wprowadzenie podprogramów
Cezary Bolek <[email protected]>
20
Historia języków programowania 2
COBOL
(1959, USA)
LISP
(1959, USA)
Algol 60
(1960)
APL
(1961, USA)
FORTRAN IV
(1962, USA)
Wstęp do informatyki
język dla przetwarzania duŜych zespołów danych
w systemach ewidencyjno-zarządczych
(skrót: COmmon Business Oriented Language)
John McCarthy publikuje specyfikację LISP-u
(skrót: LISt Processing)
międzynarodowy zespół publikuje specyfikację języka
Algol 60
Keneth Iversson publikuje specyfikację języka APL
ukierunkowanego na zagadnienia matematyczne
publikacja specyfikacji czwartej wersji języka
FORTRAN
Cezary Bolek <[email protected]>
21
7
Historia języków programowania 3
Snobol
(1962, Bell Labs, USA)
BASIC
(1964, USA)
PL/I
(1964, IBM, USA)
RPG
(1964, IBM, USA)
LOGO
(1966, USA)
Wstęp do informatyki
język programowania ukierunkowany na przetwarzanie
tekstów i wzorców językowych
John Kemeny i Thomas Kurtz opracowują język BASIC
(skrót: Beginners’ All-purpose Symbolic Instruction
Code)
publikacja specyfikacji języka PL/I przeznaczonego do
ogólnych zastosowań
publikacja specyfikacji języka RPG przeznaczonego do
raportowania baz danych
(skrót: Report Program Generator)
język wzorowany na LISP-ie, ukierunkowany na
nauczanie dzieci i osób poznających programowanie
Cezary Bolek <[email protected]>
22
Historia języków programowania 4
Simula
(1967, Norwegia)
PASCAL
(1968, Szwajcaria)
BCPL
(1969, Wlk.Brytania)
Forth
(1970, USA)
PROLOG
(1970, Francja)
Wstęp do informatyki
język wzorowany na Algolu 60; wprowadzenie pojęcia
klasy i obiektu; ukierunkowany na symulacje
Niklaus Wirth opracowuje język PASCAL do nauki
programowania strukturalnego
język niskiego poziomu zawierający wyłącznie bardzo
proste typy danych (skrót: Basic Combined
Programming Language)
Charles Moore opracowuje język wysokiego poziomu
Forth stosujący odwrotną notację polską
język wysokiego poziomu stosowany w badaniach nad
sztuczną inteligencją
(skrót: PROgramming LOGic)
Cezary Bolek <[email protected]>
23
Historia języków programowania 5
Smalltalk
pierwszy język całkowicie obiektowy
(1970, XEROX, USA)
Icon
(1970, USA)
B
(1970, USA)
C
(1972, Bell Labs, USA)
Tiny BASIC
(1975, USA)
Wstęp do informatyki
język programowania ukierunkowany na przetwarzanie
tekstów i wzorców językowych
język bazujący na BCPL opracowany dla komputera
PDP-11
Dennis Ritchie opracowuje język C (bazujący na języku
B) dla komputera PDP-11
dr Wong opracowuje miniaturową (tylko 2 KB pamięci)
wersję BASIC-a dla mikroprocesorów Intela i Ziloga;
jest to pierwszy program freeware; w programie uŜyto
zastrzeŜeń: All Wrongs Reserved oraz Copyleft
Cezary Bolek <[email protected]>
24
8
Historia języków programowania 6
Bill Gates i Paul Allen opracowują własną wersję
BASIC-a, którą sprzedają dla firmy MITS produkującej
mikrokomputer Altair, w którym stosowany jest
mikroprocesor Intel 8080
BASIC
(1975, USA)
język będący poprzednikiem PostScriptu
DSL
(1975, USA)
Jean Ichbiahn wraz z zespołem opracowują język ADA
przyjęty później jako standardowy język
programowania Ministerstwa Obrony USA
ADA
(1977, USA)
Niklaus Wirth opracowuje język stosujący
modularyzację i współbieŜność
Modula
(1977, Szwajcaria)
Wstęp do informatyki
Cezary Bolek <[email protected]>
25
Historia języków programowania 7
Niklaus Wirth opracowuje ulepszoną wersję języka
Modula
Modula-2
(1983, Szwajcaria)
C++
(1983, Bell Labs, USA)
zespół Bjarne Stroustrupa opracowuje język C++ na
bazie rozszerzonego języka C (C z klasami)
Perl
(1987)
udostępniona zostaje wersja 1.0 języka PERL
opracowanego przez Larry’ego Walla i Randala
Schwartza; (skrót: Practical Extract and Report
Language)
Java
zaprezentowano język programowania i środowisko
opracowywane od roku 1991 przez zespół Jamesa
Goslinga w Sun Microsystems
(1995, Sun, USA)
C#
(2000, Microsoft, USA)
Microsoft prezentuje język C# dla platformy .NET
będący kompilacją języków C++ i Java
Wstęp do informatyki
Cezary Bolek <[email protected]>
26
Dlaczego tak duŜo języków programowania ?
Ewolucja
Osobiste
preferencje
zastosowania
Specjalne
Wstęp do informatyki
Cezary Bolek <[email protected]>
27
9
Mnogość języków
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf
Wstęp do informatyki
Cezary Bolek <[email protected]>
28
Obszary zastosowań
Aplikacje naukowe (Fortran, TCE)
Aplikacje biznesowe (Cobol)
Sztuczna inteligencja (Lisp)
Programowanie systemowe (C, C++)
Aplikacje sieciowe (Java, C#)
Języki bardzo wysokiego poziomu (perl)
Języki wysoce specjalizowane (make, sh)
Wstęp do informatyki
Cezary Bolek <[email protected]>
29
Co czyni język popularnym ?
Efektywność kodu
Łatwość nauki
Łatwość implementacji
Open Source
Dostępność kompilatorów, bibliotek
Ekonomia, patronat, inercja
Składnia podobna do języka C
Wstęp do informatyki
Cezary Bolek <[email protected]>
30
10
Który język jest najpopularniejszy ?
http://www.tiobe.com/tpci.htm
Ranking TIOBE
• porównanie
popularności języków
programowania
• Prowadzenie badań w
oparciu o róŜne
wyszukiwarki i źródła
danych (WWW, grupy
dyskusyjne, blogi)
Nie najlepsza miara
powszechności
stosowania ale dająca
ogólny pogląd.
Określa częstość
wzmiankowania w
Internecie, czyli
„popularność”
Wstęp do informatyki
Cezary Bolek <[email protected]>
31
Który język jest najpopularniejszy ?
Wstęp do informatyki
Cezary Bolek <[email protected]>
32
Który język jest najpopularniejszy ?
Wstęp do informatyki
Cezary Bolek <[email protected]>
33
11
Paradygmaty programowania
Imperatywne (C, Pascal, etc.)
Funkcjonalne (Lisp, ML, Haskell)
Logiczne (Prolog)
Zorientowane obiektowo (C++, Java, CLOS)
Wstęp do informatyki
Cezary Bolek <[email protected]>
34
12