II. Języki programowania 1/30 Człowiek: Algorytm => program tworzy algorytm zapisuje algorytm w postaci programu (postać źródłowa) Komputer: tłumaczy program do kodu maszynowego (postać wykonywalna) wykonuje program 2/28
Etapy programowania Etap projektowania defnicja i analiza problemu specyfikacja rozwiązania problemu układanie i zapis algorytmu sprawdzenie poprawności rozwiązania (zgodności ze specyfikacją) Etap implementacji kodowanie (tłumaczenie algorytmu na język programowania) translacja (do kodu maszynowego) testowanie i usuwanie błędów (z pomocą komputera) Etap instalacji na docelowym komputerze Etap uŝytkowania i pielęgnacji 3/28 Dokumentacja WaŜne algorytm dokumentacja techniczna dokumentacja uŝytkowa komentarze Błędy w programie (ale nie na sprawdzianie ) Koszty błędów na poszczególnych etapach Rola testowania i uruchamiania Błędy kompilacji, wykonania, algorytmu będzie wykład! 4/28
Rozwój języków programowania Generacje języków: Układ przełączników i przekaźników (ENIAC) 1 GL (język maszynowy) 2 GL (assembler( assembler,, translator) 3 GL FLOW-MATIC - 1952 Grace Hopper; FORTRAN (IBM, 1954 57) 57) C, C++, Pascal, Java, Delphi, C#, 4 GL (języki zapytań, generatory raportów, przetwarzanie danych, analiza i raportowanie) SQL, FOCUS, PL/SQL, NATURAL, Progress 4GL, BuildProfessional, GEMBase,, IDL-PV/WAVE, LINC, NATURAL, Clarion, Ab Initio,, ABAP, Aubit-4GL, Informix-4GL, 5 GL Prolog, Lisp 5/28 Od źródła do kodu Pojęcie translatora interpreter kompilator kompilator skrośny (cross( cross-compilercompiler inna platforma) kod pośredni (pre( pre-kod) środowisko uruchomieniowe Java,,.NET Zintegrowane środowisko programistyczne (Integrated Development Environment,, IDE) - aplikacja do: tworzenia, modyfikowania, testowania konserwacji oprogramowania. 6/28
Dydaktyka-Pascal Algol Pascal (Blaise( Pascal), Niklausa Wirtha,, 1970 The programming language Pascal, Acta Informatica 1/1971 The programming language Pascal (Revised( Report), Bericht der Fachrgruppe Computer Wissenschaften 5/1972 pierwszy podręcznik: Jensen, Wirth, Pascal, User Manual and Report 1974. Pierwotnie: do nauki programowania strukturalnego. Szczyt popularności: lata 80, początek 90 Borland International Turbo Pascal dialekt obiektowy: Object Pascal (w Delphi, Kyliksie Borland). Wolne: kompilator- Free Pascal, środowisko IDE- Lazarus. Ciekawe linki: www.freepascal.org - darmowy, 32-bitowy kompilator Pascala www.pascal.eu.org - kurs programowania w Pascalu dla początkujących http://turbopascal.helion.pl turbopascal.helion.pl - Turbo Pascal. Programowanie, Helion,, dostępne w internecie www.centrumpascal.republika.pl - kursy i artykuły dot. TP 7/28 Od C do C#... Dennis Ritchie,, 1972 roku. 1973 - jądro UNIXa zostało przepisane w C. 1978 Brian Kernigham i Dennis Ritchie AT&T Bell Laboratories, Dennis ksiąŝka C Programming Language,, (biblia) 1989 Amerykański Narodowy Instytut Standaryzacji standard języka C (ANSI( C). C 80: B. Stroustrup,, AT&T Bell Laboratories: C++ (obiektowo) 1999 Anders Hejlsberg (TurboPascal, Delphi, Visuala J++, C#): # - to hash; ; ale C# to C-sharp 8/28
Struktura programu Program zrozumiany przez komputer (moŝliwy do przetłumaczenia) napisany zgodnie ze sztywnymi regułami uŝywanie jedynie specjalnych kombinacji wybranych symboli i tzw. słów kluczowych. Zestaw takich reguł to składnia języka programowania. 9/28 Struktura programu (uproszczona) class Hello { } C# static void Main() { pierwsza instrukcja; druga instrukcja;... ostatnia instrukcja } Pascal program nazwaprogramu Programu; sekcja deklaracji begin sekcja programu: pierwsza instrukcja; druga instrukcja;... ostatnia instrukcja end. 10/28
Punkt startowy Od metody Main,, czyli w pliku źródłowym: static void Main(string[] args) lub static void Main() teŝ: public static pojęcia: metoda, void Programowanie Obiektowe moŝna przyjąć Ŝe metoda to pewne polecenie (funkcja, procedura) nie jest bezpośrednio instrukcją danego języka kompilator potrafi zamienić to na ciąg instrukcji. Za metodą Main - blok kodu pewna logiczna całość, złoŝony z instrukcji programu, zamknięty nawiasami klamrowymi. Program: kolekcja klas static void Main() { instrukcja1; instrukcja2;... instrukcjan; } 11/28 Przestrzeń nazw Klasy umieszczane są w pewnych logicznych pudełkach na nazwy - namespace namespace PierwszyProgram { class Program { static void Main(string[] args) { } } } JeŜeli tylko jedna przestrzeń nie trzeba definiować 12/28
Nazwy Nazwa kwalifikowana (bezwzględna) klasy: PierwszyProgram.Program skrócona (w programie): Program takŝe sięgnięcie do innej przestrzeni nazw: using np. using System; oznacza, Ŝe jeŝeli kompilator nie rozpoznaje jakiejś nazwy w bieŝącym kontekście, powinien sprawdzić przestrzeń nazw System. 13/28 Ogólne zasady formatowania kodu KaŜdą instrukcję kończ znakiem średnika ; UwaŜaj na wielkość liter! main <> Main UŜywaj wcięć, róŝnicuj bloki zagnieŝdŝone Stosuj komentarze komentarz w linii //tre treść komentarza komentarz blokowy /* treść komentarza */ Dla kogo komentarz? Wykorzystuj IntelliSense pomoc środowiska Visual Studio automatycznie uzupełnia i formatuje nazwy 14/28
Zasady dot. nazw Identyfikator to ciąg znaków a-z, A-Z (duŝe i małe litery są rozróŝniane) 0-9, znak podkreślenia _ Pierwszym znakiem musi być litera lub _! dobrze: x, Xmax,, Xk_10, zm5, ZM5,, _ (!!!) źle: 6, 2zmienna, class,, ile dni, ile-dni konwencja nazwa dla programisty źle: x1, x2, z50, z34 dobrze: iledni, pensjapracownika, saldokonta zwyczajowo: całkowite: i, j, k, l, m, n 15/28 Operacja Out Operacje In/Out wypisanie tekstu na ekranie Console.WriteLine("Tekst do wypisania"); Console.Write("Tekst do wypisania"); Operacja In pobranie danych z klawiatury Console.ReadLine(); Console.Read(); W przestrzeni nazw System System.Console.WriteLine("Tekst "); using System lub using System.Console operacje we - wy 16/28
Pierwszy przykład program hello; begin writeln( ( Hello world ) end. słowo kluczowe, instrukcja Co potrafi komputer? dziedzina algorytmiczna 17/28 Dziedzina algorytmiczna Dziedziną algorytmiczną nazywamy system gdzie: A =< Α; r1,..., rk; f1,..., fl > A pewien niepusty zbiór, tzw. nośnik r 1,, r k relacje określone na elementach tego zbioru, f 1,, f l operacje (funkcje) określone na elementach ze zbioru A i dające wynik w zbiorze A, funkcje nie muszą być całkowite (określone dla kaŝdego zestawu argumentów) Ten zestaw operacji i relacji, którymi dysponujemy decyduje o moŝliwości opisywania algorytmów słuŝy do określenia tzw. złoŝoności algorytmu jest to miara słuŝąca do porównywania róŝnych algorytmów 18/28
Przykłady dziedzin algorytmicznych Arytmetyka 4 (?) klasa SP zbiór: liczby R, operacje: +, -, *, / relacje: <, >,,, = NWD(a,, b) (Euklides1 np. 72 i 20) zbiór: liczby N, operacje: -, zamień relacje: =, <, NWW (a, b) = a*b/nwd(a NWD(a,, b)? Dziedzina dla równania kwadratowego? 19/28 W języku programowania Na czym wykonywane są operacje? Jakie operacje są dostępne? dozwolone? dziedzina algorytmiczna to typ danych Typy danych w C# wartościowe (prosty, wyliczeniowy, struktura) bezpośrednio zawierają wartości dane referencyjne (klasa, interfejs, delegacja, tablica) zawierają referencję do właściwej danej 20/28
Typy wartościowe (wybrane) Category Bits Type Range/Precision całkowite ze znakiem 8 16 32 sbyte short int 128...127 32,768...32,767 2,147,483,648...2,147,483,647 64 long 9,223,372,036,854,775,808...9,223,372,036,854,775,807 całkowite bez znaku 8 16 byte ushort 0...255 0...65,535 32 uint 0...4,294,967,295 64 ulong 0...18,446,744,073,709,551,615 zmiennoprzecinko we 32 64 128 float double decimal 1.5 10 45 to 3.4 10 38, 7-digit precision 5.0 10 324 to 1.7 10 308, 15-digit precision 1.0 10 28 to 7.9 10 28, 28-digit precision 21/28 Pozostałe (wybrane) Bits Type Range 16 8 char Bool enum string struct Typy referencyjne: Class types Interface types Array types Delegate types Unicode characters Boolean User-defined types of the form enum E {...} Unicode character strings User-defined types of the form struct S {...} 22/28
Stałe logiczne (bool) true; false; Stałe całkowite (int Literały int, sbyte, short, long, byte ) dziesiętne: 0; 12; -234; szesnastkowe: 0xFF; -0xAF; Stałe rzeczywiste (float, double, decimal ) 2.3; 2.3e2;.23; 4f; -2.3e-10; Stałe znakowe (chr) 'a'; 'X'; '1'; '\'';' ''; '\\';' '; '\x004d';' '\xc'' Stałe napisowe (string) "Napis"; "\"Pan" "Pan Tadeusz\""; @"C: C:\Kurs\"; Stałe nazwane (const) const double PI = 3.14159265; 23/28 Zmienne Pole koła to: πr 2 (dla dowolnego koła a o promienmiu r) Program: dla dowolnych ( )( ) danych deklaracja zmiennych (raz( w bloku!) inicjalizacja zmiennych (opcja( opcja) przeznaczone do przechowywania danych określonego typu Przykład: int wys; ; // deklaracja zmiennej typu int o nazwie wys double pole; // dekl.. zmiennej typu double o nazwie pole string s; //sekwencja znaków kilka zmiennych tego samego typu: int wys, szer,, dl, obj; int n, m, r; char litera1, litera2; 24/28
Zmienne, identyfikatori dentyfikatory typ nazwa[=wyraŝenie] [,nazwa_n[=wyraŝenie_n] ]; int x; int a = 10, b = 20, c; Nazwa - identyfikator: składa się z liter, cyfr i znaku podkreślenia nie moŝe zaczynać się od cyfry nie moŝe być słowem kluczowym abstract, event, new, struct,, as, explicit, null,, musi być unikalna w bloku kodu! moŝna, ale wielkość liter!!! 25/28 Konwencje Nieprzestrzeganie nie powoduje błędów, ale: świadczy o dobrym stylu ułatwia późniejszą analizę. Zasady: stosuj identyfikatory mówiące, do czego słuŝy zmienna; nazwa powinna mieć konkretne znaczenie, uŝywaj formatu PascalCase lub formatu camelcase PascalCase: WriteLine, ReadLine, Console, SByte formatu uŝywamy dla nazw typów, stałych nazwanych, właściwości, przestrzeni nazw. camelcase: loopcountmax formatu uŝywamy dla nazw zmiennych lokalnych, parametrów funkcji. unikaj znaku podkreślenia, nie uŝywaj notacji węgierskiej (prefiks - informacja o typie zmiennej), unikaj skrótów i akronimów (jeŝeli, to powszechnie znane i rozumiane), stosuj w miarę moŝliwości nazwy anglojęzyczne (szczególnie przy tworzeniu bibliotek), nie mieszaj języków (np. w nazwach słów angielskich i polskich) http://home.comcast.net/~lancehunt/csharp_coding_standards.pdf home.comcast.net/~lancehunt/csharp_coding_standards.pdf, http://www.idesign.net/idesign/download/idesign Csharp Coding Standard.zip 26/28
Korzystanie z Visual Studio Pojęcie projektu (Project( Project) to logiczny pojemnik na wszystkie elementy, który słuŝą do budowy aplikacji. plik *.csproj Pojęcie rozwiązania (Solution( Solution) kontener, w którym osadzony jest projekt zawiera projekty, pliki i metadane,, które ułatwiają definiowanie rozwiązania jako spójnej całości. przykład: baza danych + lokalny interfejs administratora + zdalny (www) w) interfejs uŝytkowników plik *.sln Szablon projektu dostarcza kolekcję plików, szablon kodu, właściwości projektu 27/28 Wybór szablonu 28/28
Interfejs graficzny środowiska Zarządzanie projektem okno Solution Explorer okno programu Kompilacja, budowa i poprawa błędów Uruchamianie programu 29/28 Interfejs środowiska 30/28