Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne I stopnia Rok akademicki 2007/2008 Wykład nr 8 (16.06.2008)
Rok akademicki 2007/2008, Wykład nr 8 2/32 Plan wykładu nr 8 Przykłady języków programowania: Assembler BASIC C C++ C# Fortran Pascal Java InŜynieria oprogramowania
Rok akademicki 2007/2008, Wykład nr 8 3/32 Asembler (assembly( language) Język programowania niskiego poziomu Powstał na bazie języka maszynowego danego procesora poprzez zastąpienie kodów liczbowych instrukcji kodu maszynowego ich mnemonikami (skrótowy zapis czynności i argumentów w postaci czytelnej dla człowieka) Program napisany w asemblerze jest tłumaczony na kod maszynowy Zazwyczaj jedna instrukcja w asemblerze odpowiada jednemu rozkazowi procesora Składnia języka asemblera zaleŝy od architektury procesora oraz uŝywanego asemblera Tworzenie programu jest dość trudne, ale umoŝliwia programiście pełną kontrolę nad procesorem Programy napisane w asemblerze są bardzo wydajne
Rok akademicki 2007/2008, Wykład nr 8 4/32 Asembler - przykład programu.model SMALL.286.stack 100h.code start: jmp begin handler: pusha push ds pop ds popa iret cli mov [di],ax mov [di+2],cs sti mov ax,3100h mov dx,(offset begin - offset handler) inc dx int 21h end start begin: mov ax,0000h mov ds,ax mov di,0070h lea ax,handler
Rok akademicki 2007/2008, Wykład nr 8 5/32 BASIC (Beginner( All-purpose Symbolic Instruction Code) Prosty, interpretowany język programowania wysokiego poziomu Opracowany w 1964 roku przez J.G. Kemeny ego i T.E. Kurtza w Darthmouth Collage w oparciu o języki Fortran i Algol-60 Popularny w komputerach 8-bitowych (Atari, ZX Spectrum, Amstrad, Commodore) i kalkulatorach programowanych Występował w wielu wersjach dla róŝnych komputerów; dla IBM PC jako: GW BASIC, QB, QuickBasic, Visual Basic Brak typów, w pierwszych wersjach numerowanie instrukcji Przykładowe instrukcje: skoku bezwarunkowego: GOTO wywołania podprogramu: GOSUB RETURN warunkowa: IF THEN (ELSE) iteracyjna: FOR NEXT
Rok akademicki 2007/2008, Wykład nr 8 6/32 BASIC - przykłady programów 10 INPUT "What is your name: ", U$ 20 PRINT "Hello "; U$ 30 INPUT "How many stars: ", N 40 S$ = "" 50 FOR I = 1 TO N 60 S$ = S$ + "*" 70 NEXT I 80 PRINT S$ 90 INPUT More stars? ", A$ 100 IF LEN(A$) = 0 THEN 90 110 A$ = LEFT$(A$, 1) 120 IF A$ = "Y" OR A$ = "y" THEN 30 130 PRINT "Goodbye ";U$ 140 END INPUT "What is your name: ", UserName$ PRINT "Hello "; UserName$ DO INPUT "How many stars: ", NumStars Stars$ = STRING$(NumStars, "*") PRINT Stars$ DO INPUT More stars? ", Answer$ LOOP UNTIL Answer$ <> "" Answer$ = LEFT$(Answer$, 1) LOOP WHILE UCASE$(Answer$) = "Y" PRINT "Goodbye "; UserName$ QuickBasic
Rok akademicki 2007/2008, Wykład nr 8 7/32 C Proceduralny język programowania wysokiego poziomu Został zdefiniowany w 1972 r. przez Dennisa Ritchiego z Bell Laboratories jako język dla systemu Unix działającego na komputerze DEC PDP-11 W C zostało napisane ok. 90% kodu tego systemu i większość programów działających pod jego kontrolą W 1978 roku został opisany w ksiąŝce B.W. Kernighan, D.M. Ritchie: The C Programming Language Po 1980 r. C zyskał popularność jako uniwersalny język programowania W 1988 roku został ogłoszony standard języka C zwany ANSI C Charakterystyczne cechy: zwięzły i elastyczny, ale wymagający duŝej odpowiedzialności od programisty (np. brak wbudowanej kontroli indeksowania tablic)
Rok akademicki 2007/2008, Wykład nr 8 8/32 C++ Obiektowy język programowania zaprojektowany w 1979 roku przez Bjarne a Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i silną statyczną kontrolę typów Nazwa C++ została zaproponowana w 1983 r., wcześniej uŝywano nazwy C z klasami - ++ pochodzi od nazwy operatora inkrementacji C++ zachowuje pełną zgodność z C na poziomie kodu źródłowego Od 1998 r. obowiązuje standard ISO/IEC 14882:1998 ( Standard for the C++ Programming Language z drobnymi poprawkami z 2003 roku) Od początku występowała i wciąŝ występuje niekompatybilność kompilatorów języka C++ w zakresie obsługiwanej składni C++ nie zmusza programistów do wyboru określonego stylu programowania - w jednym programie moŝna stosować paradygmaty programowania proceduralnego, obiektowego i generycznego (uogólnionego)
Rok akademicki 2007/2008, Wykład nr 8 9/32 C++ Nowe elementy względem języka C: Programowanie obiektowe: mechanizmy enkapsulacji (funkcje składowe, sekcje prywatne, chronione i publiczne, funkcje zaprzyjaźnione), klasy, obiekty, dziedziczenie, metody wirtualne (polimorfizm), konstruktory i destruktory, operatory new i delete, metody i pola statyczne Udogodnienia związane z programowaniem generycznym: szablony (wzorce) klas i funkcji, włączenie do biblioteki standardowej generycznej biblioteki STL Obsługa wyjątków: przechwytywanie wyjątków: try catch, wywoływanie wyjątków: throw Inne: przeciąŝanie funkcji i operatorów, funkcje inline, przestrzenie nazw i operator zasięgu - ::
Rok akademicki 2007/2008, Wykład nr 8 10/32 C++ - przykład programu cpl.h #include <iostream.h> class Complex { double Re,Im; public: Complex(double,double ); Complex (void); friend istream & operator >> (istream &, Complex &); friend ostream & operator << (ostream &, Complex &); Complex & operator = (Complex &); friend Complex operator + (Complex &,Complex &); };
Rok akademicki 2007/2008, Wykład nr 8 11/32 C++ - przykład programu cpl.cpp #include "cpl.h" Complex::Complex(void) { Re=0; Im=0; } Complex::Complex(double a,double b) { Re=a; Im=b; } Complex operator + (Complex &c,complex &d) { Complex e; e.re=c.re+d.re; e.im=c.im+d.im; return e; } Complex & Complex::operator = (Complex &f) { Re=f.Re; Im=f.Im; return *this; } istream & operator >> (istream &s,complex &g) { s >> g.re; s >> g.im; return s; } ostream & operator << (ostream &s,complex &g) { s << g.re; s << g.im; return s; }
Rok akademicki 2007/2008, Wykład nr 8 12/32 C++ - przykład programu main.cpp #include <iostream.h> #include "cpl.h" void main(void) { Complex a1,a2,a3(3,4); } cout << a3; cin >> a1; cin >> a2; a3 = a1 + a2; cout << a3;
Rok akademicki 2007/2008, Wykład nr 8 13/32 C# Obiektowy język programowania zaprojektowany pod kierunkiem A. Hejlsberga dla firmy Microsoft w 2001 roku Program napisany w C# kompilowany jest do języka CIL (Common Intermediate Language), specjalnego kodu pośredniego wykonywanego w środowisku uruchomieniowym takim jak.net, Mono lub DotGNU C# ma wiele cech wspólnych z językami C++ i Java: obiektowość z hierarchią o jednym elemencie nadrzędnym: kod programu jest zbiorem klas hierarchia dziedziczenia opiera się na istnieniu jednej klasy object (System.object), która stanowi element nadrzędny tej hierarchii odśmiecanie pamięci - zarządzaniem pamięcią zajmuje się środowisko uruchomieniowe typy ogólne: mechanizm podobny do szablonów w C++ Kolejne wersje: C# 2.0 (2005), C# 3.0 (2007)
Rok akademicki 2007/2008, Wykład nr 8 14/32 C# - przykład programu using System; public class PrzykladowaKlasa { public static void Main() { string imie; Console.WriteLine("Podaj swoje imie:"); imie=console.readline(); Console.WriteLine("Twoje imie to: " + imie); } } Console.ReadKey();
Rok akademicki 2007/2008, Wykład nr 8 15/32 Fortran (FORmula( TRANslator) Język programowania stworzony w latach 50-tych, ale nadal stosowany Pierwszy kompilator Fortranu był jednocześnie pierwszym w historii kompilatorem języka wysokiego poziomu Standardy języka: Fortran IV (1960), Fortran 66, Fortran 77, Fortran 90, Fortran 95, Fortran 2003 Głównym zastosowaniem języka Fortran są obliczenia naukowoinŝynierskie (w szczególności obliczenia numeryczne) Dysponuje ogromną liczbę bibliotek, które pozwalają rozwiązać praktycznie kaŝde zadanie numeryczne O obecnym zastosowaniu Fortranu decydują: szybkość obliczeń oraz wysoka wydajność kodu generowanego przez kompilatory Inne cechy: znakomita skalowalność, przenośność oprogramowania, dostępność bibliotek do programowanie wieloprocesorowego i równoległego (MPI, PVM)
Rok akademicki 2007/2008, Wykład nr 8 16/32 Fortran - przykład programu program oblicz_srednia parameter (MaxX=1000) dimension x(maxx) character*80 plik_danych write (*,'(a,$)') "Podaj nazwe pliku danych... " 10 read (*,'(a)') plik_danych open (1,file=plik_danych,status="old",err=20) goto 30 20 write (*,*) & "Blad - ten plik nie istnieje. Podaj nazwe jeszcze raz." goto 10 30 continue read (1,*) N do i=1,n read (1,*) x(i) enddo suma = 0.0 do i=1,n suma = suma+x(i) enddo srednia = suma/n write (*,*) "Srednia wynosi",srednia stop end
Rok akademicki 2007/2008, Wykład nr 8 17/32 Pascal Opracowany w 1970 r. przez Niklausa Wirtha Szczyt popularności przypadał na lata 80-te i początek lat 90-tych Pierwotnie słuŝył celom edukacyjnym do nauki programowania strukturalnego - z tego powodu jest jednym z najszerzej znanych i popularnych języków, zwłaszcza wśród początkujących programistów Jego zastosowanie w praktyce jest obecnie bardzo ograniczone Język wysokiego poziomu, ogólnego zastosowania, oparty na Algolu Zalety: czytelność, zwięzłość kodu, rygorystyczna kontrola typów danych Jedną z popularniejszych implementacji kompilatorów tego języka był Turbo Pascal firmy Borland International Obecnie w środowiskach Delphi i Kyliks stosowany jest Object Pascal
Rok akademicki 2007/2008, Wykład nr 8 18/32 Turbo Pascal Version 7.0 - Borland International Inc.. (1992)
Rok akademicki 2007/2008, Wykład nr 8 19/32 Pascal program funkcja; var delta, x1, x2 : real; var a, b, c : real; begin writeln ('Podaj wspolczynniki a, b, c trojmianu kwadratowego: '); readln (a, b, c); delta := (b * b) - (4 * a * c); writeln ('Delta = ', delta); if delta < 0 then writeln('brak MIEJSC ZEROWYCH FUNKCJI!') else if delta > 0 then begin x1 := ((- b) - sqrt(delta)) / (2 * a); x2 := ((- b) + sqrt(delta)) / (2 * a); writeln('x1 = ', x1); writeln('x2 = ', x2); end else begin x1 := (- b) / (2 * a); writeln('x1 = ', x1); end; end.
Rok akademicki 2007/2008, Wykład nr 8 20/32 Java Obiektowy język programowania stworzony przez grupę roboczą pod kierunkiem Jamesa Goslinga z firmy Sun Microsystems Język tworzenia programów źródłowych kompilowanych do kodu bajtowego, czyli do postaci wykonywanej przez maszynę wirtualną Podstawowe koncepcje przejęte zostały z języka Smalltalk i C++: obiektowość, niezaleŝność od architektury, sieciowość i obsługa programowania rozproszonego, niezawodność i bezpieczeństwo Java składa się z szeregu klas definiujących obiekty róŝnego typu; klasy te pogrupowane są w hierarchicznie ułoŝone pakiety Podstawowy zestaw klas rozprowadzany jako Java występuje w dwóch wersjach - JRE i JDK: JRE (Java Runtime Environment) - udostępnia bytecode wszystkich klas standardowych i wirtualną maszynę do ich uruchamiania JDK (Java Development Kit) - dodatkowo udostępnia źródła klas oraz dodatkowe narzędzia jak kompilator, paker czy debuger
Rok akademicki 2007/2008, Wykład nr 8 21/32 Java - przykład programu class Person { public String firstname, lastname; public int year; public String PESEL; } public class Proba { public static void main(string[] args) { Person p, q, r; p = new Person(); q = new Person(); r = new Person(); p.firstname = "Jan"; p.lastname = "Kowalski"; p.year = 1981; p.pesel = "81111224350"; } } System.out.println( p.firstname + " " + p.lastname + ", " + p.year + ", PESEL: " + p.pesel );
Rok akademicki 2007/2008, Wykład nr 8 22/32 Środowiska programistyczne - Borland C++ Builder 6
Rok akademicki 2007/2008, Wykład nr 8 23/32 Środowiska programistyczne - Microsoft Visual C++ 6.0
Rok akademicki 2007/2008, Wykład nr 8 24/32 InŜynieria oprogramowania InŜynieria oprogramowania - zajmuje się określaniem i wprowadzaniem do uŝytku rozsądnych zasad i metod inŝynierskich w celu uzyskania, w sposób ekonomiczny niezawodnego i działającego na komputerze oprogramowania Systemy informatyczne: Obszary zainteresowania: niezawodność oprogramowania - jak pisać niezawodne programy zarządzanie projektem oprogramowania produktywność programisty
Rok akademicki 2007/2008, Wykład nr 8 25/32 Cykl Ŝycia oprogramowania Analiza potrzeb (specyfikacja) - zebranie potrzebnych informacji, przyszłych uŝytkowników systemu dla ustalenia zgodności celów systemu z celami uŝytkownika oraz przepływów informacyjnych w zinformatyzowanym systemie
Rok akademicki 2007/2008, Wykład nr 8 26/32 Cykl Ŝycia oprogramowania Projektowanie - wyodrębnienie a następnie opis modelu danych i modelu procesów (statyka i dynamika); propozycje rozwiązania problemów uŝytkownika
Rok akademicki 2007/2008, Wykład nr 8 27/32 Cykl Ŝycia oprogramowania Implementacja - zaprojektowanie struktur danych i napisanie programów realizujących procesy
Rok akademicki 2007/2008, Wykład nr 8 28/32 Cykl Ŝycia oprogramowania Testowanie - wykrywanie i usuwanie błędów zawartych w kodzie systemu informatycznego przy pomocy danych symulowanych i rzeczywistych
Rok akademicki 2007/2008, Wykład nr 8 29/32 Cykl Ŝycia oprogramowania Pielęgnacja (ewolucja) - usuwanie błędów wykrytych w czasie eksploatacji systemu oraz jego udoskonalenie (w moŝliwym zakresie)
Rok akademicki 2007/2008, Wykład nr 8 30/32 Cykl Ŝycia oprogramowania Nakład pracy w cyklu tworzenia oprogramowania 6% 5% 67% 7% 15% Analiza potrzeb Projektowanie Implementacja Testowanie Pielęgnacja
Rok akademicki 2007/2008, Wykład nr 8 31/32 Cykl Ŝycia oprogramowania Źródła błędów 7% 10% 27% 56% Analiza potrzeb Projektowanie Implementacja Inne
Rok akademicki 2007/2008, Wykład nr 8 32/32 Cykl Ŝycia oprogramowania Koszty poprawienia błędów 4% 13% 1% 82% Analiza potrzeb Projektowanie Implementacja Inne
Rok akademicki 2007/2008, Wykład nr 8 33/32 Koniec wykładu nr 8 Dziękuj kuję za uwagę!