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

Transkrypt

Microsoft PowerPoint - IwZ_5.ppt [tryb zgodno\234ci]
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.
Wstęp do informatyki
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.
Programowanie komputerów PC
CPU
ROM, RAM
ALU
Cezary Bolek
[email protected]
Uniwersytet Łódzki
Rejestry
procesora
In/Out
Wydział Zarządzania
Katedra Informatyki
Wstęp do informatyki
01001000
00001000
11001010
00001011
11111110
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.
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.
np.
48h
08h
CAh
0Bh
FEh
np.
Cezary Bolek <[email protected]>
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).
..., 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
2
Język asemblera
Język maszynowy
Pamięć operacyjna
ROM + RAM
Cezary Bolek <[email protected]>
...
MOV BL,8
ADD BL,B
INC
BL
...
3
Wstęp do informatyki
Asembler
..., 48, 08, CA, 0B, FE, ...
Cezary Bolek <[email protected]>
4
1
Kompilacja programów
Języki wysokiego poziomu
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ą.
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
...
for (i=1; i<10, i++)
{ n=10+x*2 };
...
• 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.
...
for (i=1; i<10, i++) { n=10+x*2 };
...
Wstęp do informatyki
...
for (i=1; i<10, i++)
{
n=10+x*2
};
...
Cezary Bolek <[email protected]>
5
Wstęp do informatyki
Lista
liczbą naturalną spośród tych, które dzielą obie te liczby bez reszty
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.
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]>
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
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
Np. NWD(24,18) = 6.
15 - 9 = 6
...
MOV BL,8
ADD BL,B
INC
BL
...
Przykład - algorytm Euklidesa
Znajdowanie największego wspólnego podzielnika
Największy Wspólny Dzielnik (NWD) dwóch liczb jest największą
Od większej liczby odejmujemy mniejszą. Liczby 24 i 15 przechodzą w 15 i 9.
PoniewaŜ nie są one równe, wykonujemy dalej odejmowanie
MOV
MOV
MOV
MUL
ADD
MOV
X = X + Y*Z
Przykład - algorytm Euklidesa
24 - 15 = 9
..., 48, 08, CA, 0B, FE, ...
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.
• 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 };
...
Kompilator
Schemat
7
blokowy
Wstęp do informatyki
Cezary Bolek <[email protected]>
8
2
Od języka wysokiego poziomu do kodu
maszynowego
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
$L591:
$L584:
2b c1
$L585:
3b c8
75 f4
33 c0
c3
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
Wstęp do informatyki
Cezary Bolek <[email protected]>
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);
9
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;
}
sub
eax, ecx
cmp
jne
xor
ret
ecx, eax
SHORT $L591
eax, eax
0
Wstęp do informatyki
Cezary Bolek <[email protected]>
10
Optymalizacja programu moŜliwa jest równieŜ poprzez optymalne
wykorzystanie zasobów procesora (specyficzne instrukcje, tryby
adresowania, wykorzystanie rejestrów wewnętrznych, etc.)
Put_Line("Największy wspólny dzielnik (NWD) to: "
& Integer'Image(b));
Cezary Bolek <[email protected]>
SHORT $L584
ecx, eax
SHORT $L585
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.
end;
Wstęp do informatyki
$L585:
jle
sub
jmp
Kompilatory optymalizujące
Język C
Język ADA
$L584:
ecx, 24
eax, 15
ecx, eax
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
Algorytm Euklidesa – Język C i Ada
with Text_IO;
use Text_IO;
$L591:
mov
mov
cmp
11
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
3
Kompilatory skrośne
Debugging
Debugging oznacza proces wykrywania błędów w skompilowanych
programach w trakcie ich nadzorowanego uruchamiania.
Kompilator skrośny (cross-compiler) –
kompilator, który generuje kod maszynowy na inny procesor, niŜ ten
na którym jest uruchomiony.
Nadzorowane uruchamianie programów polega na wykonywaniu
poszczególnych linii programu (praca krokowa) i sprawdzaniu wartości
zmiennych w dowolnym momencie wykonywania.
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
Program do nadzorowanego uruchamiania nazywa się Debugger’em
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
IDE – zintegrowane środowisko programistyczne
Integrated Develpement Environment (IDE)
edytor + syntax highlighting, bracket matching, macros
kompilator
debugger
Wstęp do informatyki
Cezary Bolek <[email protected]>
14
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
Cezary Bolek <[email protected]>
15
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
4
Kompilacja a interpretacja
Przenośność oprogramowania
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)
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.
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
Problem przenośności oprogramowania sprowadza się zwykle do istnienia
przenośnych bibliotek dla języków wysokiego poziomu.
Zalety kompilacji: duŜa szybkość wykonywania programów, moŜliwość
wykonywania się programów bez wspomagania innego oprogramowania.
np. www.fox-toolkit.org wieloplatformowa biblioteka graficzna dla języka C++
Wstęp do informatyki
Cezary Bolek <[email protected]>
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.
17
Wstęp do informatyki
Języki programowania
(1946, Niemcy)
A-O
(1951, USA)
AutoCode
(1952, Wlk.Brytania)
FORTRAN I
(1957, IBM, USA)
FORTRAN II
(1958, IBM, USA)
Cezary Bolek <[email protected]>
18
Historia języków programowania 1
Plankalkül
Wstęp do informatyki
Cezary Bolek <[email protected]>
19
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
5
Historia języków programowania 2
COBOL
(1959, USA)
LISP
(1959, USA)
Historia języków programowania 3
język dla przetwarzania duŜych zespołów danych
w systemach ewidencyjno-zarządczych
(skrót: COmmon Business Oriented Language)
Snobol
John McCarthy publikuje specyfikację LISP-u
(skrót: LISt Processing)
(1964, USA)
(1962, Bell Labs, USA)
BASIC
PL/I
międzynarodowy zespół publikuje specyfikację języka
Algol 60
Algol 60
(1960)
APL
(1961, USA)
FORTRAN IV
(1962, USA)
Wstęp do informatyki
(1964, IBM, USA)
RPG
Keneth Iversson publikuje specyfikację języka APL
ukierunkowanego na zagadnienia matematyczne
(1964, IBM, USA)
publikacja specyfikacji czwartej wersji języka
FORTRAN
Cezary Bolek <[email protected]>
LOGO
(1966, USA)
21
Wstęp do informatyki
Historia języków programowania 4
Simula
(1967, Norwegia)
PASCAL
(1968, Szwajcaria)
BCPL
(1969, Wlk.Brytania)
(1970, USA)
język wzorowany na Algolu 60; wprowadzenie pojęcia
klasy i obiektu; ukierunkowany na symulacje
Smalltalk
(1970, Francja)
Wstęp do informatyki
Niklaus Wirth opracowuje język PASCAL do nauki
programowania strukturalnego
Icon
język niskiego poziomu zawierający wyłącznie bardzo
proste typy danych (skrót: Basic Combined
Programming Language)
B
(1970, USA)
(1970, USA)
(1972, Bell Labs, USA)
Charles Moore opracowuje język wysokiego poziomu
Forth stosujący odwrotną notację polską
(1975, USA)
język wysokiego poziomu stosowany w badaniach nad
sztuczną inteligencją
(skrót: PROgramming LOGic)
Cezary Bolek <[email protected]>
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
pierwszy język całkowicie obiektowy
(1970, XEROX, USA)
Tiny BASIC
PROLOG
John Kemeny i Thomas Kurtz opracowują język BASIC
(skrót: Beginners’ All-purpose Symbolic Instruction
Code)
Historia języków programowania 5
C
Forth
język programowania ukierunkowany na przetwarzanie
tekstów i wzorców językowych
23
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
6
Historia języków programowania 6
BASIC
(1975, USA)
DSL
Historia języków programowania 7
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
Modula-2
(1983, Szwajcaria)
C++
(1983, Bell Labs, USA)
język będący poprzednikiem PostScriptu
Perl
(1987)
Jean Ichbiahn wraz z zespołem opracowują język ADA
przyjęty później jako standardowy język
programowania Ministerstwa Obrony USA
Java
Niklaus Wirth opracowuje język stosujący
modularyzację i współbieŜność
C#
(1975, USA)
ADA
(1977, USA)
Modula
(1977, Szwajcaria)
Wstęp do informatyki
Cezary Bolek <[email protected]>
zespół Bjarne Stroustrupa opracowuje język C++ na
bazie rozszerzonego języka C (C z klasami)
udostępniona zostaje wersja 1.0 języka PERL
opracowanego przez Larry’ego Walla i Randala
Schwartza; (skrót: Practical Extract and Report
Language)
(1995, Sun, USA)
(2000, Microsoft, USA)
25
Niklaus Wirth opracowuje ulepszoną wersję języka
Modula
Wstęp do informatyki
zaprezentowano język programowania i środowisko
opracowywane od roku 1991 przez zespół Jamesa
Goslinga w Sun Microsystems
Microsoft prezentuje język C# dla platformy .NET
będący kompilacją języków C++ i Java
Cezary Bolek <[email protected]>
26
Mnogość języków
Dlaczego tak duŜo języków programowania ?
Ewolucja
Osobiste
preferencje
Specjalne zastosowania
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf
Wstęp do informatyki
Cezary Bolek <[email protected]>
27
Wstęp do informatyki
Cezary Bolek <[email protected]>
28
7
Obszary zastosowań
Co czyni język popularnym ?
Aplikacje
naukowe (Fortran, TCE)
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)
Efektywność
kodu
Łatwość nauki
Łatwość implementacji
Open Source
Dostępność kompilatorów, bibliotek
Ekonomia, patronat, inercja
Składnia podobna do języka C
Aplikacje
Wstęp do informatyki
Cezary Bolek <[email protected]>
29
http://www.tiobe.com/tpci.htm
Który język jest najpopularniejszy ?
Wstęp do informatyki
Cezary Bolek <[email protected]>
30
Który język jest najpopularniejszy ?
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
Wstęp do informatyki
Cezary Bolek <[email protected]>
32
8
Który język jest najpopularniejszy ?
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]>
33
Wstęp do informatyki
Cezary Bolek <[email protected]>
34
9

Podobne dokumenty