24
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 1

Zaawansowane metody programowania

Embed Size (px)

Citation preview

Page 1: Zaawansowane metody programowania

Wydział ElektronikiKierunek: AiR

Zaawansowane metody programowania

Wykład 1

Page 2: Zaawansowane metody programowania

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

Page 3: Zaawansowane metody programowania

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

Page 4: Zaawansowane metody programowania

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

Page 5: Zaawansowane metody programowania

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/)

Page 6: Zaawansowane metody programowania

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

Page 7: Zaawansowane metody programowania

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

Page 8: Zaawansowane metody programowania

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

Page 9: Zaawansowane metody programowania

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).

Page 10: Zaawansowane metody programowania

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.

Page 11: Zaawansowane metody programowania

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

Page 12: Zaawansowane metody programowania

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.

Page 13: Zaawansowane metody programowania

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.

Page 14: Zaawansowane metody programowania

Zaawansowane metody programowania Microsoft Visual Studio 2008

Page 15: Zaawansowane metody programowania

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.

Page 16: Zaawansowane metody programowania

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

Page 17: Zaawansowane metody programowania

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.

Page 18: Zaawansowane metody programowania

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

Page 19: Zaawansowane metody programowania

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

Page 20: Zaawansowane metody programowania

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

Page 21: Zaawansowane metody programowania

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)

Page 22: Zaawansowane metody programowania

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

Page 23: Zaawansowane metody programowania

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(); } }}

Page 24: Zaawansowane metody programowania

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; } } }}