background image

1

Informatyka 

Programowanie w VBA

Wykład 1(2)

Jerzy Duda, 2010

Jerzy Duda, WZ AGH, 2008–2010

Zakres wykładów (1)



Programowanie, j

ę

zyki programowania



definicje



historia



Definiowane j

ę

zyka formalnego



składnia a semantyka



notacja BNF, EBNF



Paradygmaty programowania



imperatywny/proceduralny



funkcyjny



obiektowy



programowanie w logice



Translatory i interpretery



kompilator, preprocesor, asembler



interpreter, maszyna wirtualna

background image

2

Jerzy Duda, WZ AGH, 2008–2010

Zakres wykładów (2)



Sposoby reprezentacji liczb



arytmetyka binarna



liczby całkowite



liczby zmiennopozycyjne



Podstawowe struktury danych



dane elementarne



dane zło

Ŝ

one



tablice



struktury



rekordy



Nieregularne struktury danych



listy



stosy



kolejki

Jerzy Duda, WZ AGH, 2008–2010

Zakres wykładów (3)



Algorytmy



poj

ę

cie algorytmu



zło

Ŝ

ono

ść

obliczeniowa



algorytmy iteracyjne i rekurencja



podstawowe algorytmy sortowania



wyszukiwanie binarne



drzewa



haszowanie

background image

3

Jerzy Duda, WZ AGH, 2008–2010

Zakres wykładów (4)



Programowanie obiektowe



klasy



wła

ś

ciwo

ś

ci i metody



konstruktory i destruktory



hermetyzacja



dziedziczenie



polimorfizm



modyfikatory widoczno

ś

ci



klasy abstrakcyjne



programowanie obiektowe z wykorzystaniem VBA

Jerzy Duda, WZ AGH, 2008–2010

Literatura



Algorytmy



S. Harris, J. Ross: Algorytmy. Od podstaw, Helion 2006 
(Wrox)



G.T. Heineman, G. Pollice, S. Selkow: Algorytmy. 
Almanach, Helion 2010



VBA



M. Lewandowski: Tworzenie makr w VBA dla Excela 
2003/2007. 

Ć

wiczenia, Helion 2007



J. Walkenbach: Excel 2003 PL. Programowanie w VBA. 
Vademecum profesjonalisty, Helion 2004



A. Osyczka, R. Jankowski,  I. Skalna, P. Krajewski: 
Visual Basic dla Aplikacji, AGH Uczelniane Wydawnictwa 
Naukowo-Techniczne 2006

background image

4

Jerzy Duda, WZ AGH, 2008–2010

Dlaczego warto programowa

ć

?



Programowanie



dobra zabawa



zaj

ę

cie twórcze



mo

Ŝ

liwo

ść

wyra

Ŝ

ania abstrakcyjnych idei w namacalnej formie



Ź

ródło pozytywnych nawyków



uwa

Ŝ

ne czytanie



my

ś

lenie analityczne



twórcza synteza



zdolno

ść

dostrzegania szczegółów



Ka

Ŝ

dy powinien nauczy

ć

si

ę

, jak projektowa

ć

oprogramowanie

Ź

ródło: Felleisen, Findler, Faltt,Krishnamurthi: „Projektowanie oprogramowania. Wst

ę

p do programowania i techniki komputerowej”, Helion 2003

Jerzy Duda, WZ AGH, 2008–2010

Program komputerowy (1)



Niklaus Wirth



ALGORYTMY + STRUKTURY DANYCH = PROGRAMY



Programy stanowi

ą

skonkretyzowane sformułowania abstrakcyjnych 

algorytmów na podstawie okre

ś

lonej reprezentacji i struktury danych



Fundacja na rzecz Wolnej Infrastruktury Informacyjnej (FFII) 



Program komputerowy oznacza sposób przetwarzania danych, które je

ś

li s

ą

poprawnie opisane, mo

Ŝ

e by

ć

wykonywany przez komputer 



Słownik PWN 



Program to ci

ą

g instrukcji napisanych w j

ę

zyku zrozumiałym dla komputera



J. Barta R. Markiewicz



Program to zestaw instrukcji (rozkazów) przeznaczonych do u

Ŝ

ycia 

bezpo

ś

rednio lub po

ś

rednio w komputerze w celu osi

ą

gni

ę

cia okre

ś

lonego 

rezultatu

background image

5

Jerzy Duda, WZ AGH, 2008–2010

Program komputerowy (2)



Knuth Donald E. „Sztuka programowania”



Program to wyra

Ŝ

enie metody obliczeniowej w j

ę

zyku 

komputerowym



metoda obliczeniowa – procedura przekształcaj

ą

ca dane wej

ś

ciowe 

w wynik za pomoc

ą

jednoznacznie zdefiniowanych, elementarnych 

kroków



Program komputerowy – podstawowe rodzaje kodu



kod 

ź

ródłowy – stanowi

ą

cy zapis w okre

ś

lonym j

ę

zyku 

programowania; zrozumiały dla człowieka (dalej kompilowany lub 
interpretowany)



kod wykonywalny – zrozumiały dla maszyny; gotowy do wykonania 
przez maszyn

ę

(posta

ć

binarna)

Jerzy Duda, WZ AGH, 2008–2010

Programowanie komputerowe



Słownik W. Kopali

ń

skiego:



Proces sporz

ą

dzania dokładnego zestawu instrukcji potrzebnych na to, aby 

komputer mógł spełni

ć

okre

ś

lone zadanie; zestaw ten obejmuje wybór (a. 

wynalezienie) stosownego algorytmu, kodowanie i testowanie



Programowanie to proces projektowania, tworzenia i poprawiania kodu 

ź

ródłowego programów komputerowych [Wikipedia]



Etapy tworzenia oprogramowania (in

Ŝ

ynieria oprogramowania):



analiza wymaga

ń

systemowych



specyfikacja aplikacji



architektura systemu informatycznego



programowanie (implementacja)



kompilacja oprogramowania



testowanie oprogramowania



dokumentacja programu



integracja



piel

ę

gnacja oprogramowania

background image

6

Jerzy Duda, WZ AGH, 2008–2010

J

ę

zyk programowania



J

ę

zyk słu

Ŝą

cy do dialogu pomi

ę

dzy programist

ą

a komputerem, 

przeznaczony do opisu danych oraz algorytmów ich 
przetwarzania



J

ę

zyk programowania to usystematyzowany sposób 

przekazywania komputerowi polece

ń

do wykonania [wikipedia]



HOPL: system kodowania, który umo

Ŝ

liwia stworzenie programu



Niektórzy zaw

ęŜ

aj

ą

to poj

ę

cie tylko do j

ę

zyków spełniaj

ą

cych 

warunek tzw. kompletno

ś

ci Turinga 



J

ę

zyki programowania klasyfikuje si

ę

ze wzgl

ę

du na



paradygmaty



generacj

ę



implementacj

ę

Jerzy Duda, WZ AGH, 2008–2010

Troch

ę

historii



Encyklopedia History
of Programming
Languages wylicza
8512 j

ę

zyków

programowania



Ludzko

ść

na 

ś

wiecie

u

Ŝ

ywa obecnie

ok. 6-7 tysi

ę

cy j

ę

zyków



www.99-bottles-of-beer.net
program w 1318 j

ę

zykach

Ź

ródło rysunku: http://users.skynet.be/averkeyn/computer/histlang.html

background image

7

Jerzy Duda, WZ AGH, 2008–2010

Historia j

ę

zyków (1)





1943

1943

– pierwszy j

ę

zyk Plankalkül

opracowany przez Konrada Zuse
(Bawaria); publikacja w 1948;
brak implementacji





1952

1952

– pierwszy kompilator – j

ę

zyk Autocode na komputer Mark 1 

opracowany przez Alicka Glennie’a (Univ. of Manchester)

Ź

ródło kodów: "Hello, World!" in 66 Programming languages”, http://www.scribd.com/doc/2276844

R1.1(V0[:sig]) => R0
R1.2(V0[:m x sig]) => R0
0 => i | m + 1 => j
[W [ i < j -> [ R1.1(V0[i: m x sig]) => R0 | i + 1 => i ] ] ]
END
R1.3() => R0
'H';'e';'l';'l';'o';',';' ';'w';'o';'r';'l';'d';'!' => Z0[: m x sig]
R1.2(Z0) => R0
END

org 100h
start:                          

mov ah, 9
mov dx, hello
int 21h
mov ax, 4C00h
int 21h

hello

db 'Hello World!','$'

Assembler (Intel)

Jerzy Duda, WZ AGH, 2008–2010

Historia j

ę

zyków (2)





1954

1954

– Fortran (FORmula TRANslator system) - John Backus i inni 

naukowcy z IBM; Fortran II (1958) wprowadza p

ę

tle, funkcje i 

procedury





1958

1958

– LISP (LISt Processing)

– składnia nawiasowa

C     Fortran: Hello, world!

PROGRAM HALLO
WRITE (*,100)
STOP

100 FORMAT ('Hello, world!') 

END

;;; Common Lisp: "Hello, world!"
(defun helloworld ()

(print "Hello, world!")

)(helloworld)

background image

8

Jerzy Duda, WZ AGH, 2008–2010

Historia j

ę

zyków (3)





1960

1960

– Cobol (COmmon Business Oriented Langage) - COnference

on DAta SYsystems Language; wprowadzenie rekordów





1964

1964

– Basic (Beginner’s All-purpose Symbolic Instruction Code)

- John Kemeny i Thomas Kurtz 





1970

1970

– Pascal opracowany przez

Niklausa Wirtha – programowanie
strukturalne

10 REM BASIC: "Hello, world!"
20 PRINT "Hello, world!"

program HelloWorld;
(* Pascal: Hello, world! *)
begin

WriteLn('Hello, world!');

end.

Jerzy Duda, WZ AGH, 2008–2010

Historia j

ę

zyków (4)





1972

1972

– J

ę

zyk C opracowany w 1972 r. przez Dennisa Ritchiego z

Bell Telephone Laboratories dla systemu Unix





1972

1972

– Smalltalk - pierwszy j

ę

zyk zorientowany obiektowo 

(podstawy OOP Simula – 1962)





1972

1972

– PROLOG - programowanie w logice (Francja)





pocz

pocz

ą

ą

tek lat 1970

tek lat 1970

– SQL opracowany w IBM SEQUEL (Structured 

English Query Language)

/* Hello world */
#include <stdio.h>

int main(void)
{

printf("Hello, world!\n");
return 0;

}

% Prolog: "Hello, world!"
?- write('Hello, world!') , nl .

-- SQL: "Hello, world!"
SELECT 'Hello, world!' AS message;

background image

9

Jerzy Duda, WZ AGH, 2008–2010

Historia j

ę

zyków (5)





1983

1983

– C++; C with Classes opracowany przez Bjarne’a Stroustrupa

(1979); bazowany na C i Simuli





1991

1991

– Java stworzona przez Jamesa Goslinga, programist

ę

Sun 

(pierwotnie jako Oak); Java 1.0 (1995) - Write Once, Run Anywhere

#include <iostream>
using namespace std;

int main() // Hello World
{

cout << "Hello, World!" << endl;
return 0;

}

class HelloWorld
{  

public static void main(String args[])
{

System.out.println("Hello, World!");

}

}

Jerzy Duda, WZ AGH, 2008–2010

Historia j

ę

zyków (6)





1993

1993

– Ruby stworzony przez Yukihiro "Matz" Matsumoto; oparty na 

wielu paradygmatach





1995

1995

– PHP (PHP: Hypertext Preprocessor) opracowany pierwotnie 

przez Rasmusa Lerdorfa (Dania)





2000

2000

– C# opracowany przez Microsoft (zespół Anders Hejlsberga) 

jako cz

ęść ś

rodowiska .NET; zaaprobowany jako standard przez 

ECMA oraz ISO

using System;

class HelloWorld
{

public static void Main(string[] args)
{

Console.WriteLine("Hello, World!");

}

}

<?php // PHP: "Hello, world!"
echo "<html><body>"."Hello, world!"."</body></html>"; ?>

background image

10

Jerzy Duda, WZ AGH, 2008–2010

Popularno

ść

j

ę

zyków – TIOBE

Ź

ródło: http://www.tiobe.com

Jerzy Duda, WZ AGH, 2008–2010

Paradygmaty programowania

Paradygmaty programowania

Programowanie imperatywne (1)

Ź

ródło:  Małgorzata Moczurad, Włodzimierz Moczurad: Paradygmaty programowania, http://wazniak.mimuw.edu.pl/



Najbardziej pierwotny sposób programowania, w którym program 
postrzegany jest jako ci

ą

g polece

ń

dla komputera 



Obliczenia to sekwencja polece

ń

zmieniaj

ą

cych krok po kroku stan 

maszyny, a

Ŝ

do uzyskania oczekiwanego wyniku



Stan maszyny to zawarto

ść

całej pami

ę

ci oraz rejestrów

i znaczników procesora



Ten sposób patrzenia na programy zwi

ą

zany jest 

ś

ci

ś

le

z budow

ą

sprz

ę

tu komputerowego o architekturze von Neumanna, 

w którym poszczególne instrukcje to wła

ś

nie polecenia zmieniaj

ą

ce 

stan

Demo: 

http://osilek.mimuw.edu.pl/images/9/91/kontener.html?
nazwa_animacji=/images/7/71/Pp-1.1.1

background image

11

Jerzy Duda, WZ AGH, 2008–2010

Programowanie imperatywne (2)

Ź

ródło:  Małgorzata Moczurad, Włodzimierz Moczurad: Paradygmaty programowania, http://wazniak.mimuw.edu.pl/



J

ę

zyki wysokiego poziomu — takie jak Basic czy C — posługuj

ą

si

ę

pewnymi abstrakcjami, ale wci

ąŜ

odpowiadaj

ą

paradygmatowi 

programowania imperatywnego



Instrukcje podstawienia działaj

ą

na danych pobranych z pami

ę

ci i 

umieszczaj

ą

wynik w tej

Ŝ

e pami

ę

ci, za

ś

abstrakcj

ą

komórek pami

ę

ci 

s

ą

zmienne

Sub Pierwszy
Dim s as Integer
Dim n as Integer
n = InputBox()
s = 1
For i = 2 To n

s = s * i
MsgBox(s)

Next i
End Sub

int main()
{

int i, n, s;

n=scanf("%d",&n);
s = 1;
for(i=2;i<=n;i++)

{s*=i;

printf("%d",s);}

return 0;

}

Jerzy Duda, WZ AGH, 2008–2010

Programowanie proceduralne
i strukturalne

Ź

ródło:  http://pl.wikipedia.org/wiki/Programowanie_strukturalne





Programowanie proceduralne

Programowanie proceduralne

to paradygmat programowania 

zalecaj

ą

cy dzielenie kodu na procedury, czyli fragmenty 

wykonuj

ą

ce 

ś

ci

ś

le okre

ś

lone operacje



Procedury nie powinny korzysta

ć

ze zmiennych globalnych

(w miar

ę

mo

Ŝ

liwo

ś

ci), lecz pobiera

ć

i przekazywa

ć

wszystkie dane 

(czy te

Ŝ

wska

ź

niki do nich) jako parametry wywołania





Programowanie strukturalne

Programowanie strukturalne

to podzbiór programowania 

proceduralnego zalecaj

ą

ce:



stosowanie konstrukcji j

ę

zyka takich jak p

ę

tle (

WHILE

) i 

instrukcje warunkowe (

IF ELSE

)



unikanie instrukcji 

GOTO

i wielokrotnych punktów wej

ś

cia i 

wyj

ś

cia z kodu danego podbloku programu



(Inna definicja:) paradygmat zalecaj

ą

cy hierarchiczne dzielenie kodu 

na moduły, które komunikuj

ą

si

ę

jedynie poprzez dobrze okre

ś

lone 

interfejsy

background image

12

Jerzy Duda, WZ AGH, 2008–2010

Dekompozycja funkcjonalna



Hierarchiczny podział systemu (programu) na bloki 
funkcyjne (operacje, procedury, moduły)



Ka

Ŝ

dy z bloków:



wykonuje okre

ś

lone zadanie dla systemu



ma jasno zdefiniowane wej

ś

cia i wyj

ś

cia



mo

Ŝ

e by

ć

traktowany oddzielnie w stosunku do pozostałych 

bloków

Jerzy Duda, WZ AGH, 2008–2010

Programowanie obiektowe (1)

Ź

ródło:  Małgorzata Moczurad, Włodzimierz Moczurad: Paradygmaty programowania, http://wazniak.mimuw.edu.pl/



W programowaniu obiektowym program to zbiór porozumiewaj

ą

cych 

si

ę

ze sob

ą

obiektów



Obiekty to jednostki zawieraj

ą

ce pewne dane i umiej

ą

ce wykonywa

ć

na nich pewne operacje



Wa

Ŝ

n

ą

cech

ą

jest tu powi

ą

zanie danych (czyli stanu) z operacjami 

na nich (czyli poleceniami) w cało

ść

, stanowi

ą

c

ą

odr

ę

bn

ą

jednostk

ę

– obiekt



Cech

ą

nie mniej wa

Ŝ

n

ą

jest mechanizm dziedziczenia, czyli 

mo

Ŝ

liwo

ść

definiowania nowych, bardziej zło

Ŝ

onych obiektów, na 

bazie obiektów ju

Ŝ

istniej

ą

cych

Demo: 

http://osilek.mimuw.edu.pl/images/9/91/kontener.html?
nazwa_animacji=/images/e/ef/Pp-1.1.2

background image

13

Jerzy Duda, WZ AGH, 2008–2010

Programowanie obiektowe (2)

Ź

ródło:  Małgorzata Moczurad, Włodzimierz Moczurad: Paradygmaty programowania, http://wazniak.mimuw.edu.pl/



Zwolennicy programowania obiektowego uwa

Ŝ

aj

ą

Ŝ

e ten 

paradygmat dobrze odzwierciedla sposób, w jaki ludzie my

ś

l

ą

ś

wiecie 



Przykłady j

ę

zyków: Smalltalk, C++, Java, C#

public class Student {

String nazwisko;
String imie;
int ocena;
long nrIndeksu;

void ocen(int o);
{

this.ocena = o;

}

}

Jerzy Duda, WZ AGH, 2008–2010

Programowanie funkcyjne (1)

Ź

ródło:  Małgorzata Moczurad, Włodzimierz Moczurad: Paradygmaty programowania, http://wazniak.mimuw.edu.pl/



Program to po prostu zło

Ŝ

ona funkcja (w sensie matematycznym), 

która gdy otrzyma dane wej

ś

ciowe wylicza pewien wynik



Brak stanu maszyny: nie ma zmiennych, a co za tym idzie nie ma 

Ŝ

adnych efektów ubocznych



Nie ma te

Ŝ

imperatywnych z natury, tradycyjnie rozumianych p

ę

tli 

(wymagaj

ą

np. zmiennych do sterowania ich przebiegiem)

Demo: 

http://osilek.mimuw.edu.pl/images/9/91/kontener.html?
nazwa_animacji=/images/9/93/Pp-1.1.3

background image

14

Jerzy Duda, WZ AGH, 2008–2010

Programowanie funkcyjne (2)

Ź

ródło:  Małgorzata Moczurad, Włodzimierz Moczurad: Paradygmaty programowania, http://wazniak.mimuw.edu.pl/; Wikipedia



Konstruowanie programów to składanie funkcji, zazwyczaj
z istotnym wykorzystaniem rekurencji

(defun factorial (n)

(if (<= n 1)

1

(* n (factorial (- n 1)))))

let rec factorial n = 

if n = 0 
then 1 
else n * factorial (n - 1)

System.Console.WriteLine(factorial anInt)



Przykłady j

ę

zyków: Lisp, Scheme, ML (bakusa), Haskell, 

F#

Lisp

F#

Jerzy Duda, WZ AGH, 2008–2010

Programowanie logiczne (1)

Ź

ródło:  Małgorzata Moczurad, Włodzimierz Moczurad: Paradygmaty programowania, http://wazniak.mimuw.edu.pl/



Na program składa si

ę

zbiór zale

Ŝ

no

ś

ci (przesłanki, predykaty) i 

pewne stwierdzenie (cel, konkluzja) 



Wykonanie programu to próba udowodnienia celu w oparciu o 
podane przesłanki 



Obliczenia wykonywane s

ą

niejako „przy okazji” dowodzenia celu 



Podobnie jak w programowaniu funkcyjnym, nie „wydajemy 
rozkazów”, a jedynie opisujemy, co wiemy i co chcemy uzyska

ć

Demo: 

http://osilek.mimuw.edu.pl/images/9/91/kontener.html?
nazwa_animacji=/images/d/dc/Pp-1.1.4

background image

15

Jerzy Duda, WZ AGH, 2008–2010

Programowanie logiczne (2)

Ź

ródło:  Małgorzata Moczurad, Włodzimierz Moczurad: Paradygmaty programowania, http://wazniak.mimuw.edu.pl/

ojciec(jan, jerzy).
ojciec(jerzy, janusz).
ojciec(jerzy, józef).
dziadek(X, Z) :- ojciec(X, Y), ojciec(Y, Z).
?- dziadek(X, janusz).



Przykłady: PROLOG, Mercury, Oz

Jerzy Duda, WZ AGH, 2008–2010

Programowanie sterowane 
zdarzeniami

Ź

ródło:  http://en.wikipedia.org/wiki/Event-driven_programming



Przepływ w programie zale

Ŝ

y od akcji u

Ŝ

ytkownika (klikni

ę

cie 

myszki, naci

ś

ni

ę

cie klawisza) lub wiadomo

ś

ci z innych 

programów



W programowaniu wsadowym przepływ jest okre

ś

lony przez 

programist

ę



Wersja wsadowa



Wersja sterowana zdarzeniami

read a number (from the keyboard) and store it in variable A[0]
read a number (from the keyboard) and store it in variable A[1]
print A[0]+A[1]

set counter K to 0
repeat {

if a number has been entered (from the keyboard) {

store in A[K] and increment K
if K equals 2 print A[0]+A[1] and reset K to 0

}

}

background image

16

Jerzy Duda, WZ AGH, 2008–2010

Generacje j

ę

zyków (1)

Ź

ródło:  http://pl.wikipedia.org



1GL



nie było translatora, który był dokonywał kompilacji lub 
asemblacji kodu



programowanie odbywało si

ę

bezpo

ś

rednio w j

ę

zyku maszyny



program był efektywny, ale wymagał ka

Ŝ

dorazowego przepisania 

dla innej maszyny



2GL



kod programu zapisywany symbolicznie w j

ę

zyku asemblera



poprawiona czytelno

ść

kodu dla człowieka



podstawowa wada: równie

Ŝ

zwi

ą

zany z j

ę

zykiem danej maszyny



wykorzystywany, tam gdzie potrzebny jest b. szybki kod 
wynikowy: j

ą

dra systemów, sterowników, fragmentów kodu gier, 

szyfrowania

xor ax, ax

mov bx, ax

jmp skok1

01001001010010

101100101010

Jerzy Duda, WZ AGH, 2008–2010

Generacje j

ę

zyków (2)

Ź

ródło:  http://en.wikipedia.org



3GL



program zapisywany w j

ę

zyku wysokiego poziomu



łatwo zrozumiały dla człowieka, m.in. przez zastosowanie 
zmiennych



pierwsze przykłady: Fortran, ALGOL, COBOL 



nowsze j

ę

zyki: Basic, C, C++, Java



4GL



j

ę

zyk programowania albo 

ś

rodowisko programistyczne nastawione 

na rozwój aplikacji dla biznesu



cel: redukcja czasu potrzebnego na stworzenie programu oraz 
zmniejszenie liczby bł

ę

dów



zalicza si

ę

do nich:



generatory raportów (np. PS)



hurtownie danych (np. SAS)



j

ę

zyki baz danych (np. SQL)

let a=0

let b=a

goto skok1

SELECT 0 FROM dummytable

background image

17

Jerzy Duda, WZ AGH, 2008–2010

Generacje j

ę

zyków (3)

Ź

ródło:  http://en.wikipedia.org



4GL (c.d.)



niektórzy autorzy nie uwa

Ŝ

aj

ą

j

ę

zyków 4GL za prawdziwe j

ę

zyki



inni proponuj

ą

okre

ś

la

ć

tym mianem tylko j

ę

zyki umo

Ŝ

liwiaj

ą

ce 

programowanie obiektowe



5GL



ide

ą

jest aby komputer sam rozwi

ą

zywał problem



bazuje na rozwi

ą

zywaniu problemów poprzez dostarczenie 

ogranicze

ń

, a nie na algorytmie dostarczonym przez programist

ę



Freuder: "to jak 

Ś

wi

ę

ty Graal dla programowania – u

Ŝ

ytkownik 

dostarcza problem, a komputer sam go rozwi

ą

zuje"



do j

ę

zyków 5GL zalicza si

ę

wi

ę

kszo

ść

j

ę

zyków programowania w 

logice (PROLOG) oraz w logice z ograniczeniami



wykorzystuj

ą

osi

ą

gni

ę

cia sztucznej inteligencji

Jerzy Duda, WZ AGH, 2008–2010

Generacje j

ę

zyków (4)



5GL – definicja IEEE



5GL to j

ę

zyk, który realizuje koncepcje systemów opartych na 

wiedzy, systemów ekspertowych, systemów wnioskowania oraz 
przetwarzaniu j

ę

zyka naturalnego



5GL – alternatywna definicja



5GL to 

ś

rodowisko programistyczne, które wykorzystuje graficzny 

interfejs u

Ŝ

ytkownika w celu stworzenia kodu 

ź

ródłowego, który jest 

nast

ę

pnie kompilowany przy u

Ŝ

yciu j

ę

zyka 3GL lub 4GL



Programowanie graficzne umo

Ŝ

liwia łatwiejsze stosowanie klas, 

poruszanie si

ę

po ich hierarchii, itd

background image

18

Jerzy Duda, WZ AGH, 2008–2010

Kompilator



Kompilator

– program, który przetwarza kod napisany w 

jednym j

ę

zyku (tzw. j

ę

zyku 

ź

ródłowym) na równowa

Ŝ

ny kod

w drugim j

ę

zyku (tzw. j

ę

zyku wynikowym)



J

ę

zyki wynikowe generowane przez kompilatory



j

ę

zyk (kod) maszynowy

dowolnego komputera od 

mikrokontrolera do superkomputera



przeno

ś

ny 

kod po

ś

redni

dla ró

Ŝ

norodnych maszyn 

wirtualnych (Java i platforma .NET)



inny 

j

ę

zyk programowania

(istniej

ą

np. kompilatory 

tłumacz

ą

ce z j

ę

zyka Fortran na j

ę

zyk Pascal); zwane s

ą

translatorami



Asembler

tłumaczy kod zapisany w 

j

ę

zyku symbolicznym 

na

j

ę

zyk maszynowy

Ź

ródło:  Wojciech Complak: Podstawy kompilatorów, http://wazniak.mimuw.edu.pl/

Jerzy Duda, WZ AGH, 2008–2010

Interpreter



Interpreter

– program komputerowy, który analizuje kod 

ź

ródłowy 

programu a przeanalizowane fragmenty wykonuje



Wykonanie programu za pomoc

ą

interpretera jest wolniejsze a 

do tego zajmuje wi

ę

cej zasobów systemowych ni

Ŝ

wykonanie 

kodu skompilowanego



Interpreter musi analizowa

ć

ka

Ŝ

de wyra

Ŝ

enie i nast

ę

pnie 

wykona

ć

akcj

ę

, a kod skompilowany jedynie wykonuje akcj

ę



Analiza wyra

Ŝ

enia nazywana jest "kosztem interpretacji"



W implementacjach b

ę

d

ą

cych w pełni interpreterami wykonanie 

wielokrotne tego samego fragmentu kodu wymaga wielokrotnej 
interpretacji tekstu



Cykl edycja-interpretacja-debugowanie mo

Ŝ

e czasami by

ć

jednak znacznie krótszy ni

Ŝ

cykl edycja-kompilacja-

uruchomienie-debugowanie

Ź

ródło:  http://pl.wikipedia.org/