240 likes | 448 Views
Wydział Elektroniki Kierunek: AiR. Zaawansowane metody programowania Wykład 1. Zaawansowane metody programowania Dane podstawowe . Wykład: 1 Laboratorium: 2. Wykład : ocena (kolokwium na ostatnim wykładzie) Laboratorium : ocena. Dr inż. Jerzy Kotowski
E N D
Wydział ElektronikiKierunek: AiR Zaawansowane metody programowania Wykład 1
Zaawansowane metody programowaniaDane podstawowe Wykład: 1 Laboratorium: 2 Wykład: ocena (kolokwium na ostatnim wykładzie) Laboratorium: ocena Dr inż. Jerzy Kotowski Instytut Informatyki Automatyki i Robotyki Zakład Sterowania i Optymalizacji pok. 219 C-3 http://jerzy.kotowski.staff.iiar.pwr.wroc.pl
Zaawansowane metody programowaniaOpis przedmiotu • Cele zajęć: • Opanowanie zaawansowanych technik programowania umożliwiających samodzielną implementację rozwiązań, praktyczne posługiwanie się narzędziami informatycznymi i biegłością w programowaniu • Krótki opis zawartości całego kursu: • Omawiane są techniki programowania umożliwiających programowanie w środowisku rozproszonym i równoległym/sieciowym. Ponadto prezentowane są metody przyspieszania programów uwzględniające architektury wybranych systemów komputerowych. Poszczególne techniki ilustrowane są za pomocą programów w językach C++, Java i C#. • Zespół dydaktyczny: • Prof. dr hab. inż. Czesław Smutnicki • dr inż. Jerzy Kotowski • dr inż. Grzegorz Mzyk • dr inż. Przemysław Śliwiński
Zaawansowane metody programowaniaZawartość tematyczna wykładu • Wprowadzenie do wybranych języków wysokiego poziomu (Java, C#, C++; Wybrane języki środowiska programowania) • Szablony, generyki a programowanie obiektowe • Kontenery, iteratory, algorytmy • Strumienie, przetwarzanie łańcuchów, wyrażenia regularne, wyszukiwanie wzorców • Obsługa wyjątków. Procesy i wątki. Komunikacja i synchronizacja zadań (Współbieżność, procesy wątki) • Wzorce projektowe. Uruchamianie programów (Testowanie oprogramowania) • Omówienie bibliotek interfejsu graficznego użytkownika, multimedialnych i sieciowych. • Zaliczenie
Zaawansowane metody programowaniaLiteratura • Literatura podstawowa • B. Stroustrup, Język C++, Wydawnictwo Naukowo Techniczne, Warszawa, 2002. • B. Eckel, Thinking In Java, Wydawnictwo Helion, 2006 • S.B. Lippman, J. Lajoie, Podstawy języka C++, Wydawnictwo Naukowo Techniczne, Warszawa, 2003. • S. Meyers, Język C++ bardziej efektywny. 35 praktycznych sposobów ulepszenia programów, Wydawnictwa Naukowo-Techniczne, 1998 • H. Sutter, Wyjątkowy język C++ 47 łamigłówek, zadań programistycznych i rozwiązań, Wydawnictwa Naukowo-Techniczne, 2002 • D. Vandevoorde, N. M. Josuttis, C++ szablony. Vademecum profesjonalisty, Helion, 2003 • Literatura uzupełniająca • B. Stroustrup, Projektowanie i rozwój języka C++, Wydawnictwo Naukowo Techniczne, Warszawa, 1996. • D. Vandevoorde, Język C ++. Ćwiczenia i rozwiązania, Wydawnictwo Naukowo Techniczne, Warszawa, 2001. • D. E. Knuth, Sztuka programowania, T. I-III, Wydawnictwo Naukowo Techniczne, Warszawa, 2001. • S. Lippman, Model obiektu w C++, Wydawnictwa Naukowo-Techniczne, 1999. • Przyszłe wydania standardów ANSI C++ (http://www.boost.org). • Oficjalna strona języka Java (http://java.sun.com) • Oficjalna strona języka C# (http://msdn.microsoft.com/vcsharp/)
Trochę historiiENIAC • Electronic Numerical Integrator And Computer; • Elektroniczny i Numeryczny Integrator i Komputer; • konstrukcja 1943-1945; do 1955; • kilka liczb: • masa ponad 27 ton, • około 18 000 lamp elektronowych • powierzchnia ok. 140 m2 • zapotrzebowanie na moc 180 kW • Szybkość obliczeń: 5 tysięcy dodawań liczb dziesiętnych dziesięciocyfrowych na sekundę • pluskwa – bug, debugger, debugging
Trochę historiiSuperkomputer • FLOPS – FLoating point Operations Per Second • Wydajność komputera megaflops – 106 gigaflops – 109 teraflops – 1012 petaflops – 1015 eksaflops – 1018 zettaflops – 1021 jottaflops – 1024
Trochę historiiRoadrunner • Posiadacz: Department of Energy USA • Gdzie: Los Alamos National Laboratory • 12960 mikroprocesorów Cell oraz 6948 dwurdzeniowych mikroprocesorów AMD. • System operacyjny: Red Hat Linux. • Koszt: 100 mln $ • Waga: 250 t • Szybkość docelowa: 1.5 PFLOPS
Trochę historiiGeneracje języków programowania • W ciągu 50 lat powstały cztery generacje języków programowania. • W językachpierwszej generacji (FORTRAN 1, COBOL) charakterystyczny jest wspólny obszar danych globalnych, do którego odwołują się podprogramy. • Podstawami rozwoju drugiej generacji języków byłą taka modyfikacja podprogramów, by mogły one przekazywać między sobą parametry, być zagnieżdżane i mieć zróżnicowany zakres widoczności deklaracji stałych i zmiennych. Wymienione własności spowodowały powstanie strukturalnych metod projektowania oprogramowania. • Charakterystyczną cechą języków trzeciej generacji była modułowość. Wyodrębnienie modułów w procesie dekompozycji funkcjonalnej pozwalało na rozdzielenie pracy pomiędzy samodzielnych programistów (język ANSI C).
Trochę historiiJęzyki czwartej generacji • Języki czwartej generacji, zwane językami obiektowymi (np. C++), zmieniają podejście do zagadnienia struktur danych. • Języki obiektowe rozszerzają pojęcie struktury danych o nowy element zwany obiektem (typem obiektowym). • Typ obiektowy zawiera dane i sposoby posługiwania się tymi danymi (metody obiektu, funkcje składowe). • Programowanie obiektowe jest metodą tworzenia oprogramowania, w której programy są organizowane jako kolekcje obiektów. • C++, Java, C# są językami programowania obiektowego.
Trochę historiiC++ • Język C++ jest ewolucyjnym rozszerzeniem języka C • Język C++ zaprojektowano w celu: zachowania wysokiej efektywności i przenoszalności języka C, pełnej zgodności z językiem C, likwidacji wad języka C, w szczególności słabej kontroli typów danych, wyposażenia języka w nowoczesne mechanizmy ukrywania danych. • C++ powstał w Bell Labs w połowie 1980 - Bjarne Stroustrup • C++ dodaje do C koncepcję klasy - mechanizm, który pozwala wprowadzać nowe typy danych definiowane przez użytkownika abstract data types - ADT. W konsekwencji pozwala to na object oriented programmingOOP. • C is a machine level, while C++ is a problem level • C++ is an improved C
Trochę historiiJava Powstanie: 1991 rok (18 miesięcy) Twórcy: James Gosling, Patrick Naughton, Chris Warth, Ed Frank, Mike Sheridan (Sun Microsystems). Potrzeba zdefiniowania języka niezależnego od platformy, do tworzenia oprogramowania wbudowanego w sprzęt elektroniczny powszechnego użytku (kuchenki mikrofalowe, pilot zdalnego sterowania). W miedzy czasie, pojawił się znacznie ważniejszy czynnik: sieć WWW. Przeniesienie uwagi projektantów Javy z elektroniki powszechnego użytku na programowanie dla Internetu. Wpierw: Oak. Zmiana w 1995 na Java.
Trochę historiiC# • Projekt C# rozpoczął się w 1998 roku. • Celem projektu było opracowanie prostego, nowoczesnego i obiektowego języka programowania przeznaczonego dla nowej platformy .NET (nazwa .NET pojawiła się później). • C# został zaprojektowany przez zespół pod kierunkiem Andersa Hejlsberga dla firmy Microsoft. • Program napisany w języku C# jest kompilowany do języka Common Intermediate Language (CIL), tzn. kodu pośredniego wykonywanego w środowisku uruchomieniowym takim jak .NET Framework. • Wykonanie skompilowanego programu przez system operacyjny bez takiego środowiska nie jest możliwe.
Zaawansowane metody programowania Microsoft Visual Studio 2008
Microsoft Visual C# 2008 Pierwszy program • Create Project (File – New – Project) ->Other languages -> Visual C# -> Console Application -> Name: ZaMePro1 -> OK. • Zwyczajowo pliki C# mają rozszerzenie *.cs • Inaczej niż w C++ w C# (tak samo w Javie) nie jest możliwe tworzenie funkcji globalnych ani globalnych wskaźników do danych. • Każda aplikacja w C# musi posiadać klasę definiującą metodę Main(), która zostanie wykorzystana do punktu początkowego aplikacji. • Styl komentarzy w C# został zapożyczony z C++. • static - metoda statyczna w klasie ma zasięg klasy i może zostać wywołana bez tworzenia instancji obiektu.
Microsoft Visual C# 2008 Pierwszy program – code using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ZaMePro1 { class Program { static void Main(string[] args) { Console.WriteLine("Ala ma kota"); Console.ReadKey(); } } } 1.1
Microsoft Visual C# 2008 Składowe Console Class • Console Class - Represents the standard input, output, and error streams for console applications. This class cannot be inherited. • WriteLine(String) - Writes the specified string value, followed by the current line terminator, to the standard output stream. • ReadKey() - Obtains the next character or function key pressed by the user. The pressed key is displayed in the console window. • Beep()- Plays the sound of a beep through the console speaker • Clear() - Clears the console buffer and corresponding console window of display information.
Microsoft Visual C# 2008 Drugi program – code using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ZaMePro1 { class Program { static void Main(string[] args) { Console.WriteLine("Ala ma kota"); Console.ReadKey(); Console.Beep(); Console.BackgroundColor = ConsoleColor.DarkBlue; Console.ForegroundColor = ConsoleColor.Yellow; Console.Clear(); Console.WriteLine("Ela ma kota"); Console.ReadKey(); Console.Beep(); } } } 1.2
Microsoft Visual C# 2008 Argumenty funkcji main using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ZaMePro1 { class Program { static void Main(string[] args) { Console.WriteLine("Ala ma kota"); Console.WriteLine(); // argumenty funkcji Main for (int x = 0; x < args.Length; x++) Console.WriteLine("Argument {0}: {1} ", x, args[x]); Console.WriteLine("\nKoniec"); Console.ReadKey(); } } } 1.3
Microsoft Visual C# 2008 Konstruktory • Klasa Program ma trzy konstruktory • Nie ma destruktora • Garbage collection • Klasa ma składowe typu dane • Metoda klasy tworzy instancje obiektów swojego typu class Program { public Program() // konstruktor bez argumentów { Console.WriteLine("Ala ma kota"); } public Program(string text) // Konstruktor z argumentem { Console.WriteLine(text); } public Program(int x) // Konstruktor z argumentem { X = x; Console.WriteLine("Cena programu: {0} $", X); } int X; // Klasa Program ma składowe typu dane static void Main(string[] args) { // p1, p2, p3, p4 - tworzone wewnątrz klasy Program p1 = new Program(); // Konstrukcja obiektu Program p2; // Tylko referencja p2 = new Program("Jest i Pies!"); Program p3 = new Program(125); Program p4 = new Program(1024); Console.ReadKey(); } } 1.4
Microsoft Visual C# 2008 Wszystko jest obiektem - Everything is an Object • Podstawowa różnica pomiędzy C++ i C#: • w C# wszystko jest obiektem (nawet liczba) • istnieje garbage collector (tzn. że nie musimy, a nawet nie możemy usuwać samemu niepotrzebnych obiektów) • C# został stworzony dla Microsoftu (?). • The object type is an alias for Object in the .NET Framework. In the unified type system of C#, all types, predefined and user-defined, reference types and value types, inherit directly or indirectly from Object. • You can assign values of any type to variables of type object. • When a variable of a value type is converted to object, it is said to be boxed. (pakowanie, paczka) • When a variable of type object is converted to a value type, it is said to be unboxed. (rozpakowywanie)
Microsoft Visual C# 2008 Everything is an Object using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ZaMePro1 { class Program { static void Main(string[] args) { object A1 = 3; // pakowanie object A2 = "Ala ma kota"; // pakowanie int A3 = (int)A1; // rozpakowywanie string A4 = (string)A2; // rozpakowywanie Console.WriteLine("A1: {0} \t\t typ: {1}", A1, A1.GetType()); Console.WriteLine("A2: {0} typ: {1}", A2, A2.GetType()); Console.WriteLine("A3: {0} \t\t typ: {1}", A3, A3.GetType()); Console.WriteLine("A4: {0} typ: {1}", A4, A4.GetType()); Console.ReadKey(); } } } 1.5
Struktura programu w języku C# Klasa stos – plik Program.cs • Podstawowe pojęcia organizacyjne: • Programy • Przestrzenie nazw • Typy • Składowe • Podzespoły (assemblies). • Programy C# składają się z jednego lub kilku plików źródłowych • W języku C# nie ma potrzeby używania dyrektywy #include i plików nagłówkowych. namespace ZaMePro_2 { class Program { static void Main() { Stack s=new Stack(); s.push(1); s.push("Ala ma kota"); s.push(3.14); Console.WriteLine(s.Pop()); Console.WriteLine(s.Pop()); Console.WriteLine(s.Pop()); Console.ReadKey(); } } } 1.6
Struktura programu w języku C# Klasa stos – plik Stack.cs namespace ZaMePro_2 { class Stack { Element top; // obiekt na szczycie stosu public void push(object dane) // składanie na stosie { top = new Element(top, dane); } public object Pop() // pobieranie ze stosu { if (top == null) throw new InvalidOperationException(); object result = top.dane; top = top.next; return result; } class Element // klasa zagnieżdżona { public Element next; // następny element public object dane; // element na stosie public Element(Element next, object dane) // konstruktor { this.next = next; this.dane = dane; } } } } 1.6