1 2 3 4 5 6 II. Języki programowania Proces: algorytm => program Człowiek: tworzy algorytm zapisuje algorytm w postaci programu (postać źródłowa) Komputer: tłumaczy program do kodu maszynowego (postać wykonywalna) wykonuje program A w praktyce 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 Ważne Dokumentacja 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! 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) 1
2 GL (assembler, translator) 3 GL FLOW-MATIC - 1952 Grace Hopper; FORTRAN (IBM, 1954 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 7 8 9 Od źródła do kodu Pojęcie translatora interpreter kompilator kompilator skrośny (cross-compiler inna platforma) kod pośredni (pre-kod) środowisko uruchomieniowe Java,.NET Zintegrowane środowisko programistyczne (Integrated Development Environment, IDE) - aplikacja do: tworzenia, modyfikowania, testowania konserwacji oprogramowania. 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 - Turbo Pascal. Programowanie, Helion, dostępne w internecie www.centrumpascal.republika.pl - kursy i artykuły dot. TP Od C do C#... AT&T Bell Laboratories, Dennis Ritchie, 1972 roku. 1973 - jądro UNIXa zostało przepisane w C. 1978 Brian Kernigham i Dennis Ritchie książka C Programming Language, (biblia) 1989 Amerykański Narodowy Instytut Standaryzacji standard języka C (ANSI C). 80: B. Stroustrup, AT&T Bell Laboratories: C++ (obiektowo) 2
1999 Anders Hejlsberg (TurboPascal, Delphi, Visuala J++, C#): # - to hash; ale C# to C-sharp 10 11 12 1 2 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. Struktura programu (uproszczona) Pascal program nazwaprogramu; sekcja deklaracji begin sekcja programu: pierwsza instrukcja; druga instrukcja;... ostatnia instrukcja end. C# class Hello { static void Main() { pierwsza instrukcja; druga instrukcja;... ostatnia instrukcja 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) 3
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 13 14 15 16 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ć 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. 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ść komentarza komentarz blokowy /* treść komentarza */ Dla kogo komentarz? Wykorzystuj IntelliSense pomoc środowiska Visual Studio automatycznie uzupełnia i formatuje nazwy Zasady dot. nazw 4
17 18 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 Operacje In/Out Operacja 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 Pierwszy przykład program hello; begin writeln( Hello world ) end. 19 słowo kluczowe, instrukcja Co potrafi komputer? dziedzina algorytmiczna Dziedzina algorytmiczna Dziedziną algorytmiczną nazywamy system gdzie: 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 5
1 l 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 20 21 22 23 24 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, b)? Dziedzina dla równania kwadratowego? 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 Typy wartościowe (wybrane) Pozostałe (wybrane) Literały Stałe logiczne (bool) true; false; Stałe całkowite (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; 6
Stałe znakowe (chr) 'a'; 'X'; '1'; '\''; '\\'; '\x004d'; '\xc' Stałe napisowe (string) "Napis"; "\"Pan Tadeusz\""; @"C:\Kurs\"; Stałe nazwane (const) const double PI = 3.14159265; 25 26 27 Zmienne Pole koła to: r 2 (dla dowolnego koła o promienmiu r) Program: dla dowolnych ( ) danych deklaracja zmiennych (raz w bloku!) inicjalizacja zmiennych (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; Zmienne, identyfikatory 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! wielkość liter!!! 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) 7
http://home.comcast.net/~lancehunt/csharp_coding_standards.pdf, http://www.idesign.net/idesign/download/idesign Csharp Coding Standard.zip 28 29 30 31 Korzystanie z Visual Studio Pojęcie projektu (Project) to logiczny pojemnik na wszystkie elementy, który służą do budowy aplikacji. plik *.csproj Pojęcie rozwiązania (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) interfejs użytkowników plik *.sln Szablon projektu dostarcza kolekcję plików, szablon kodu, właściwości projektu Wybór szablonu Interfejs graficzny środowiska Zarządzanie projektem okno Solution Explorer okno programu Kompilacja, budowa i poprawa błędów Uruchamianie programu Interfejs środowiska 8