Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 1
Wydział ElektronikiKierunek: AiR
Zaawansowane metody programowania
Wykład 1
Zaawansowane metody programowaniaDane podstawowe
Wykład: 1Laboratorium: 2
Wykład: ocena (kolokwium na ostatnim wykładzie)Laboratorium: ocenaDr inż. Jerzy Kotowski
Instytut Informatyki Automatyki i RobotykiZakład Sterowania i Optymalizacji
pok. 219 C-3http://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
1. Wprowadzenie do wybranych języków wysokiego poziomu (Java, C#, C++; Wybrane języki środowiska programowania)
2. Szablony, generyki a programowanie obiektowe3. Kontenery, iteratory, algorytmy4. Strumienie, przetwarzanie łańcuchów, wyrażenia
regularne, wyszukiwanie wzorców5. Obsługa wyjątków. Procesy i wątki. Komunikacja i
synchronizacja zadań (Współbieżność, procesy wątki)
6. Wzorce projektowe. Uruchamianie programów (Testowanie oprogramowania)
7. Omówienie bibliotek interfejsu graficznego użytkownika, multimedialnych i sieciowych.
8. Zaliczenie
Zaawansowane metody programowaniaLiteratura
• Literatura podstawowa1. B. Stroustrup, Język C++, Wydawnictwo Naukowo Techniczne, Warszawa, 2002.2. B. Eckel, Thinking In Java, Wydawnictwo Helion, 20063. S.B. Lippman, J. Lajoie, Podstawy języka C++, Wydawnictwo Naukowo
Techniczne, Warszawa, 2003.4. S. Meyers, Język C++ bardziej efektywny. 35 praktycznych sposobów ulepszenia
programów, Wydawnictwa Naukowo-Techniczne, 19985. H. Sutter, Wyjątkowy język C++ 47 łamigłówek, zadań programistycznych i
rozwiązań, Wydawnictwa Naukowo-Techniczne, 20026. D. Vandevoorde, N. M. Josuttis, C++ szablony. Vademecum profesjonalisty,
Helion, 2003 • Literatura uzupełniająca
1. B. Stroustrup, Projektowanie i rozwój języka C++, Wydawnictwo Naukowo Techniczne, Warszawa, 1996.
2. D. Vandevoorde, Język C ++. Ćwiczenia i rozwiązania, Wydawnictwo Naukowo Techniczne, Warszawa, 2001.
3. D. E. Knuth, Sztuka programowania, T. I-III, Wydawnictwo Naukowo Techniczne, Warszawa, 2001.
4. S. Lippman, Model obiektu w C++, Wydawnictwa Naukowo-Techniczne, 1999.5. Przyszłe wydania standardów ANSI C++ (http://www.boost.org).6. Oficjalna strona języka Java (http://java.sun.com)7. 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ść komputeramegaflops – 106
gigaflops – 109
teraflops – 1012
petaflops – 1015
eksaflops – 1018
zettaflops – 1021
jottaflops – 1024
Rok Komputer Wydajność1946 ENIAC 5000+ 350* 40/ na
sek.1976 Cray-1A 133 MFLOPS1983 Cray X-MP 235 MFLOPS1997 ASCI Red /
91521.3 TFLOPS
2002 Earth-Simulator
35.9 TFLOPS
2004 IBM Blue Gene 70.7 TFLOPS2005 IBM Blue Gene 140 TFLOPS2008 IBM
Roadrunner1 PFLOPS
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ęzykach pierwszej 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 programming OOP.
• 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
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(); }}
• Klasa Program ma trzy konstruktory
• Nie ma destruktora
• Garbage collection
• Klasa ma składowe typu dane
• Metoda klasy tworzy instancje obiektów swojego typu1.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.
1.6
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(); } }}
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; }
1.6
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; } } }}