Title: Wydzial Elektroniki Kierunek: AiR
1Wydzial ElektronikiKierunek AiR
- Zaawansowane metody programowania
- Wyklad 1
2Zaawansowane metody programowaniaDane podstawowe
Wyklad 1 Laboratorium 2
Wyklad ocena (kolokwium na ostatnim
wykladzie) Laboratorium ocena
Dr inz. Jerzy Kotowski Instytut Informatyki
Automatyki i Robotyki Zaklad Sterowania i
Optymalizacji pok. 219 C-3 http//jerzy.kotowski.s
taff.iiar.pwr.wroc.pl
3Zaawansowane metody programowaniaOpis przedmiotu
- Cele zajec
- Opanowanie zaawansowanych technik programowania
umozliwiajacych samodzielna implementacje
rozwiazan, praktyczne poslugiwanie sie
narzedziami informatycznymi i biegloscia w
programowaniu - Krótki opis zawartosci calego kursu
- Omawiane sa techniki programowania
umozliwiajacych programowanie w srodowisku
rozproszonym i równoleglym/sieciowym. Ponadto
prezentowane sa metody przyspieszania programów
uwzgledniajace architektury wybranych systemów
komputerowych. Poszczególne techniki ilustrowane
sa za pomoca programów w jezykach C, Java i C. - Zespól dydaktyczny
- Prof. dr hab. inz. Czeslaw Smutnicki
- dr inz. Jerzy Kotowski
- dr inz. Grzegorz Mzyk
- dr inz. Przemyslaw Sliwinski
4Zaawansowane metody programowaniaZawartosc
tematyczna wykladu
- Wprowadzenie do wybranych jezyków wysokiego
poziomu (Java, C, C Wybrane jezyki srodowiska
programowania) - Szablony, generyki a programowanie obiektowe
- Kontenery, iteratory, algorytmy
- Strumienie, przetwarzanie lancuchów, wyrazenia
regularne, wyszukiwanie wzorców - Obsluga wyjatków. Procesy i watki. Komunikacja i
synchronizacja zadan (Wspólbieznosc, procesy
watki) - Wzorce projektowe. Uruchamianie programów
(Testowanie oprogramowania) - Omówienie bibliotek interfejsu graficznego
uzytkownika, multimedialnych i sieciowych. - Zaliczenie
5Zaawansowane metody programowaniaLiteratura
- Literatura podstawowa
- B. Stroustrup, Jezyk C, Wydawnictwo Naukowo
Techniczne, Warszawa, 2002. - B. Eckel, Thinking In Java, Wydawnictwo Helion,
2006 - S.B. Lippman, J. Lajoie, Podstawy jezyka C,
Wydawnictwo Naukowo Techniczne, Warszawa, 2003. - S. Meyers, Jezyk C bardziej efektywny. 35
praktycznych sposobów ulepszenia programów,
Wydawnictwa Naukowo-Techniczne, 1998 - H. Sutter, Wyjatkowy jezyk C 47 lamiglówek,
zadan programistycznych i rozwiazan, Wydawnictwa
Naukowo-Techniczne, 2002 - D. Vandevoorde, N. M. Josuttis, C szablony.
Vademecum profesjonalisty, Helion, 2003 - Literatura uzupelniajaca
- B. Stroustrup, Projektowanie i rozwój jezyka C,
Wydawnictwo Naukowo Techniczne, Warszawa, 1996. - D. Vandevoorde, Jezyk C . Cwiczenia i
rozwiazania, 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. - Przyszle wydania standardów ANSI C
(http//www.boost.org). - Oficjalna strona jezyka Java (http//java.sun.com)
- Oficjalna strona jezyka C (http//msdn.microsoft.
com/vcsharp/)
6Troche historiiENIAC
- Electronic Numerical Integrator And Computer
- Elektroniczny i Numeryczny Integrator i
Komputer - konstrukcja 1943-1945 do 1955
- kilka liczb
- masa ponad 27 ton,
- okolo 18 000 lamp elektronowych
- powierzchnia ok. 140 m2
- zapotrzebowanie na moc 180 kW
- Szybkosc obliczen 5 tysiecy dodawan liczb
dziesietnych dziesieciocyfrowych na sekunde - pluskwa bug, debugger, debugging
7Troche historiiSuperkomputer
- FLOPS FLoating point Operations Per Second
- Wydajnosc komputera
- megaflops 106
- gigaflops 109
- teraflops 1012
- petaflops 1015
- eksaflops 1018
- zettaflops 1021
- jottaflops 1024
Rok Komputer Wydajnosc
1946 ENIAC 5000 350 40/ na sek.
1976 Cray-1A 133 MFLOPS
1983 Cray X-MP 235 MFLOPS
1997 ASCI Red / 9152 1.3 TFLOPS
2002 Earth-Simulator 35.9 TFLOPS
2004 IBM Blue Gene 70.7 TFLOPS
2005 IBM Blue Gene 140 TFLOPS
2008 IBM Roadrunner 1 PFLOPS
8Troche 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
- Szybkosc docelowa 1.5 PFLOPS
9Troche historiiGeneracje jezyków programowania
- W ciagu 50 lat powstaly cztery generacje jezyków
programowania. - W jezykach pierwszej generacji (FORTRAN 1, COBOL)
charakterystyczny jest wspólny obszar danych
globalnych, do którego odwoluja sie podprogramy. - Podstawami rozwoju drugiej generacji jezyków byla
taka modyfikacja podprogramów, by mogly one
przekazywac miedzy soba parametry, byc
zagniezdzane i miec zróznicowany zakres
widocznosci deklaracji stalych i zmiennych.
Wymienione wlasnosci spowodowaly powstanie
strukturalnych metod projektowania
oprogramowania. - Charakterystyczna cecha jezyków trzeciej
generacji byla modulowosc. Wyodrebnienie modulów
w procesie dekompozycji funkcjonalnej pozwalalo
na rozdzielenie pracy pomiedzy samodzielnych
programistów (jezyk ANSI C).
10Troche historiiJezyki czwartej generacji
- Jezyki czwartej generacji, zwane jezykami
obiektowymi (np. C), zmieniaja podejscie do
zagadnienia struktur danych. - Jezyki obiektowe rozszerzaja pojecie struktury
danych o nowy element zwany obiektem (typem
obiektowym). - Typ obiektowy zawiera dane i sposoby poslugiwania
sie tymi danymi (metody obiektu, funkcje
skladowe). - Programowanie obiektowe jest metoda tworzenia
oprogramowania, w której programy sa organizowane
jako kolekcje obiektów. - C, Java, C sa jezykami programowania
obiektowego.
11Troche historiiC
- Jezyk C jest ewolucyjnym rozszerzeniem jezyka C
- Jezyk C zaprojektowano w celu zachowania
wysokiej efektywnosci i przenoszalnosci jezyka C,
pelnej zgodnosci z jezykiem C, likwidacji wad
jezyka C, w szczególnosci slabej kontroli typów
danych, wyposazenia jezyka w nowoczesne
mechanizmy ukrywania danych. - C powstal w Bell Labs w polowie 1980 - Bjarne
Stroustrup - C dodaje do C koncepcje klasy - mechanizm,
który pozwala wprowadzac nowe typy danych
definiowane przez uzytkownika 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
12Troche historiiJava
- Powstanie 1991 rok (18 miesiecy)
- Twórcy James Gosling, Patrick Naughton, Chris
Warth, Ed Frank, Mike Sheridan (Sun
Microsystems). - Potrzeba zdefiniowania jezyka niezaleznego od
platformy, do tworzenia oprogramowania
wbudowanego w sprzet elektroniczny powszechnego
uzytku (kuchenki mikrofalowe, pilot zdalnego
sterowania). - W miedzy czasie, pojawil sie znacznie
wazniejszy czynnik siec WWW. - Przeniesienie uwagi projektantów Javy z
elektroniki powszechnego uzytku na programowanie
dla Internetu. - Wpierw Oak. Zmiana w 1995 na Java.
13Troche historiiC
- Projekt C rozpoczal sie w 1998 roku.
- Celem projektu bylo opracowanie prostego,
nowoczesnego i obiektowego jezyka programowania
przeznaczonego dla nowej platformy .NET (nazwa
.NET pojawila sie pózniej). - C zostal zaprojektowany przez zespól pod
kierunkiem Andersa Hejlsberga dla firmy
Microsoft. - Program napisany w jezyku C jest kompilowany do
jezyka Common Intermediate Language (CIL), tzn.
kodu posredniego wykonywanego w srodowisku
uruchomieniowym takim jak .NET Framework. - Wykonanie skompilowanego programu przez system
operacyjny bez takiego srodowiska nie jest
mozliwe.
14Zaawansowane metody programowania Microsoft
Visual Studio 2008
15Microsoft Visual C 2008 Pierwszy program
- Create Project (File New Project) -gtOther
languages -gt Visual C -gt Console Application -gt
Name ZaMePro1 -gt OK. - Zwyczajowo pliki C maja rozszerzenie .cs
- Inaczej niz w C w C (tak samo w Javie) nie
jest mozliwe tworzenie funkcji globalnych ani
globalnych wskazników do danych. - Kazda aplikacja w C musi posiadac klase
definiujaca metode Main(), która zostanie
wykorzystana do punktu poczatkowego aplikacji. - Styl komentarzy w C zostal zapozyczony z C.
- static - metoda statyczna w klasie ma zasieg
klasy i moze zostac wywolana bez tworzenia
instancji obiektu.
16Microsoft 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
17Microsoft Visual C 2008 Skladowe 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.
18Microsoft 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()
1.2
19Microsoft 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 lt args.Length x)
- Console.WriteLine("Argument 0
1 ", x, argsx) - Console.WriteLine("\nKoniec")
- Console.ReadKey()
-
1.3
20Microsoft 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
skladowe typu dane - static void Main(string args)
-
- // p1, p2, p3, p4 - tworzone wewnatrz
klasy
- Klasa Program ma trzy konstruktory
- Nie ma destruktora
- Garbage collection
- Klasa ma skladowe typu dane
- Metoda klasy tworzy instancje obiektów swojego
typu
1.4
21Microsoft Visual C 2008 Wszystko jest obiektem
- Everything is an Object
- Podstawowa róznica pomiedzy C i C
- w C wszystko jest obiektem (nawet liczba)
- istnieje garbage collector (tzn. ze nie musimy, a
nawet nie mozemy usuwac samemu niepotrzebnych
obiektów) - C zostal 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)
22Microsoft 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())
1.5
23Struktura programu w jezyku C Klasa stos
plik Program.cs
- Podstawowe pojecia organizacyjne
- Programy
- Przestrzenie nazw
- Typy
- Skladowe
- Podzespoly (assemblies).
- Programy C skladaja sie z jednego lub kilku
plików zródlowych - W jezyku C nie ma potrzeby uzywania dyrektywy
include i plików naglówkowych.
namespace ZaMePro_2 class Program
static void Main()
Stack snew 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
24Struktura programu w jezyku C Klasa stos
plik Stack.cs
- namespace ZaMePro_2
-
- class Stack
-
- Element top // obiekt na szczycie
stosu - public void push(object dane) //
skladanie 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 zagniezdzona
public Element next // nastepny
element public object dane // element
na stosie public Element(Element next,
object dane) // konstruktor
this.next next this.dane
dane
1.6