Rok akademicki 2007/2008, Wykład nr 8 2/32 Plan wykładu nr 8 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) Przykłady języków programowania: C# Assembler BASIC C C++ Fortran Pascal Java InŜynieria oprogramowania Rok akademicki 2007/2008, Wykład nr 8 3/32 Rok akademicki 2007/2008, Wykład nr 8 4/32 Asembler (assembly( language) Asembler - przykład programu 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.model SMALL.286.stack 100h.code start: jmp begin handler: pusha push ds pop ds popa iret begin: mov ax,0000h mov ds,ax mov di,0070h lea ax,handler cli mov [di],ax mov [di+2],cs sti mov ax,3100h mov dx,(offset begin - offset handler) inc dx int 21h end start Programy napisane w asemblerze są bardzo wydajne
Rok akademicki 2007/2008, Wykład nr 8 5/32 Rok akademicki 2007/2008, Wykład nr 8 6/32 BASIC (Beginner( All-purpose Symbolic Instruction Code) BASIC - przykłady programów 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 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 Rok akademicki 2007/2008, Wykład nr 8 8/32 C 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 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 Charakterystyczne cechy: zwięzły i elastyczny, ale wymagający duŝej odpowiedzialności od programisty (np. brak wbudowanej kontroli indeksowania tablic) 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 Rok akademicki 2007/2008, Wykład nr 8 10/32 C++ Nowe elementy względem języka C: C++ - przykład programu cpl.h 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 - :: #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 Rok akademicki 2007/2008, Wykład nr 8 12/32 C++ - przykład programu cpl.cpp C++ - przykład programu main.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; #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 Rok akademicki 2007/2008, Wykład nr 8 14/32 C# C# - przykład programu 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++ 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(); Kolejne wersje: C# 2.0 (2005), C# 3.0 (2007) Rok akademicki 2007/2008, Wykład nr 8 15/32 Rok akademicki 2007/2008, Wykład nr 8 16/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) 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 Rok akademicki 2007/2008, Wykład nr 8 18/32 Pascal Turbo Pascal Version 7.0 - Borland International Inc.. (1992) 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 19/32 Rok akademicki 2007/2008, Wykład nr 8 20/32 Pascal Java 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. 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 Rok akademicki 2007/2008, Wykład nr 8 22/32 Java - przykład programu Środowiska programistyczne - Borland C++ Builder 6 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 23/32 Rok akademicki 2007/2008, Wykład nr 8 24/32 Środowiska programistyczne - Microsoft Visual C++ 6.0 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 Rok akademicki 2007/2008, Wykład nr 8 26/32 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 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 Rok akademicki 2007/2008, Wykład nr 8 28/32 Implementacja - zaprojektowanie struktur danych i napisanie programów realizujących procesy 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 Rok akademicki 2007/2008, Wykład nr 8 30/32 Nakład pracy w cyklu tworzenia oprogramowania 6% 5% 7% Analiza potrzeb 15% Projektowanie Implementacja 67% Testowanie Pielęgnacja (ewolucja) - usuwanie błędów wykrytych w czasie eksploatacji systemu oraz jego udoskonalenie (w moŝliwym zakresie) Pielęgnacja Rok akademicki 2007/2008, Wykład nr 8 31/32 Rok akademicki 2007/2008, Wykład nr 8 32/32 Źródła błędów Koszty poprawienia błędów 4% 7% 10% 13% 1% Analiza potrzeb Analiza potrzeb 27% 56% Projektowanie Implementacja Inne 82% Projektowanie Implementacja Inne
Rok akademicki 2007/2008, Wykład nr 8 33/32 Koniec wykładu nr 8 Dziękuj kuję za uwagę!