Projekt okładki: Michał Rosiński

Redakcja: Joanna Cierkońska

Zastrzeżonych nazw firm i produktów użyto w książce wyłącznie w celu identyfikacji.

Copyright © by Wydawnictwo Naukowe PWN SA

Warszawa 2009  

eBook został przygotowany na podstawie wydania papierowego z 2009 r., (wyd. I)

Warszawa 2019

ISBN 978-83-01-20445-7

Wydawnictwo Naukowe PWN SA

02-460 Warszawa, ul. Gottlieba Daimlera 2

tel. 22 69 54 321, faks 22 69 54 288

infolinia 801 33 33 88

e-mail: pwn@pwn.com.pl; reklama@pwn.pl

www.pwn.pl

Skład wersji elektronicznej na zlecenie Wydawnictwa Naukowego PWN: mobisfera.pl

Spis treści

1. Wprowadzenie

1.1. Język Python

1.2. Wersje

1.3. Visual Studio

2. Środowisko programowania

2.1. IronPython Studio – instalacja

2.2. Tryby pracy

3. Pierwsze próby

Ćwiczenie 1. Zaczynamy

Ćwiczenie 2. Poznajemy podstawowe kontrolki

4. Wprowadzanie danych, formatowanie wyników

Ćwiczenie 3. Obliczamy pole i objętość kuli

Ćwiczenie 4. Inny sposób wyświetlenia wyników

Ćwiczenie 5. Pytanie w oknie MessageBox

5. Typy danych, wyrażenia i operatory

Ćwiczenie 6. Pracujemy w trybie natychmiastowym

Ćwiczenie 7. Zamieniamy miejscami wartości zmiennych

5.1. Liczby

Ćwiczenie 8. Typy liczb

Ćwiczenie 9. Działania i operatory arytmetyczne

Ćwiczenie 10. Funkcje matematyczne

5.2. Łańcuchy znaków

Ćwiczenie 11. Działania na łańcuchach

Ćwiczenie 12. Formatujemy łańcuchy

5.3. Listy i krotki

Ćwiczenie 13. Tworzymy listę

5.4. Słowniki

Ćwiczenie 14. Tworzymy słownik

5.5. Unifikacja typów i klas

Ćwiczenie 15. Typy danych

Ćwiczenie 16. Sprawdzamy nazwy klas

Ćwiczenie 17. Szukamy rodziców

Ćwiczenie 18. Zdobywamy informacje o obiektach

6. Sterowanie programem

6.1. Instrukcja warunkowa

Ćwiczenie 19. Analizujemy wprowadzone dane

Ćwiczenie 20. Kalendarz

Instrukcja powtarzania for

Ćwiczenie 21. Drukujemy tablicę wartości funkcji

Ćwiczenie 22. Wyznaczamy wartość π

6.3. Instrukcja powtarzania while

Ćwiczenie 23. Obliczamy wartość funkcji silnia

Ćwiczenie 24. Szukamy największego wspólnego dzielnika

7. Kontrola poprawności danych, obsługa sytuacji wyjątkowych

7.1. Stosujemy kontrolki ograniczające wprowadzanie danych

Ćwiczenie 25. Zakup samochodu

Ćwiczenie 26. Wielkanoc – używamy maski wprowadzania

7.2. Zdarzenia walidacji danych

Ćwiczenie 27. Wykorzystujemy zdarzenia Validating oraz Validated

7.3. Strukturalna obsługa wyjątków

Ćwiczenie 28. Przechwytujemy błędy

Ćwiczenie 29. Tworzymy własny wyjątek

8. Podprogramy

8.1. Funkcje użytkownika

Ćwiczenie 30. Argumenty funkcji: domyślne i nazwane

Ćwiczenie 31. Funkcja z dowolną liczbą argumentów pozycyjnych

Ćwiczenie 32. Funkcja z dowolną liczbą argumentów nazwanych

Ćwiczenie 33. Przekazujemy argumenty zmienne

Ćwiczenie 34. Rekurencyjna definicja silni

Ćwiczenie 35. Definiujemy funkcje lambda

8.2. Moduły

Ćwiczenie 36. Tworzymy własny moduł

9. Grafika GDI+

9.1. Podstawowe metody i obiekty graficzne

Ćwiczenie 37. Rysujemy typowe obiekty graficzne

Ćwiczenie 38. Przeglądamy wypełnienia typu HatchStyle

9.2. Wykorzystanie plików graficznych

Ćwiczenie 39. Tworzymy własną przeglądarkę

9.3. Animacja

Ćwiczenie 40. Animacja kontrolki PictureBox

Ćwiczenie 41. Animacja grafik pobieranych z plików

Ćwiczenie 42. Ruch Ziemi wokół Słońca

10. Moje klasy

10.1. Klasy, konstruktory

Ćwiczenie 43. Moja pierwsza klasa

Ćwiczenie 44. Tworzymy zmienne za pomocą konstruktora

Ćwiczenie 45. Przekazujemy argumenty do konstruktora

Ćwiczenie 46. Bezpośrednio przypisujemy wartości

10.2. Hermetyzacja – akcesory

Ćwiczenie 47. Nadzorujemy przypisywanie wartości

Ćwiczenie 48. Inna metoda nadzorująca

Ćwiczenie 49. Definiujemy własne akcesory

Ćwiczenie 50. Chronimy atrybuty

Ćwiczenie 51. Prawie pełna ochrona

10.3. Jeszcze jeden konstruktor

Ćwiczenie 52. Używamy innego konstruktora

Ćwiczenie 53. Co jeszcze może zrobić konstruktor?

10.4. Dziedziczenie

Ćwiczenie 54. Dziedziczymy klasy

10.5. Metody wirtualne

Ćwiczenie 55. Redefiniujemy metody

10.6. Dwa przykłady

Ćwiczenie 56. „Klasowa” implementacja listy

Ćwiczenie 57. Słownik

11. Interfejs użytkownika

11.1. Menu

Ćwiczenie 58. Tworzymy własny edytor tekstu

11.2. Pasek narzędzi

Ćwiczenie 59. Dodajemy pasek narzędzi

11.3. Pasek stanu

Ćwiczenie 60. Rozbudowujemy edytor – pasek stanu

11.4. Obsługa plików

Ćwiczenie 61. Odczytujemy i zapisujemy pliki

12. Bazy danych

Ćwiczenie 62. Odczytujemy dane z bazy

Ćwiczenie 63. Korzystamy z plików XML

13. Zakończenie

Ćwiczenie 64. Tworzymy aplikację Windows bez wspomagania graficznego

1. Wprowadzenie

1.1. Język Python

Python jest obiektowym językiem programowania, używanym na różnych platformach (Win32, Unix, MacOS, Solaris, PalmOS i innych). Jest językiem interpretowanym, a więc łatwo może być przenoszony z jednych systemów do drugich. Jest też bezpłatny i powszechnie dostępny (np. przez Internet). Można w nim pisać zarówno niewielkie skrypty, jak i duże aplikacje i łączyć go z innymi językami (bibliotekami napisanymi w innych językach). Kod Pythona można zagnieżdżać w HTML i XML.

Python powstał w 1989 roku. Jego twórcą jest Holender Guido van Rossum. Nazwy nie należy kojarzyć z gatunkiem węża, lecz z serialem telewizyjnym Latający cyrk Monty Pythona, którego sympatykiem jest autor. Obecnie kod źródłowy Pythona  jest rozwijany, modyfikowany, poprawiany i testowany przez wiele osób. W 1998 roku powstało Python Consortium, którego celem jest wprowadzanie poprawek, modyfikacji, normalizacja i publikowanie kolejnych wersji języka. 

Główną zaletą Pythona jest wieloplatformowość. Skrypt napisany pod kontrolą Microsoft Windows będzie działał zarówno z Linuksem, Mac OS, jak i wieloma innymi systemami operacyjnymi. Liczba dystrybucji interpretatora języka do różnych systemów ciągle się zwiększa. Python jest dołączany do różnych wersji Linuksa i Solarisa. W Windows (oprócz standardowego uruchamiania) może być również używany przez systemowy interpretator Windows Script Host, obok JavaScriptu i Visual Basic Scriptu.

Dużym atutem Pythona jest prosta składnia i łatwość stosowania obiektowego stylu programowania.

1.2. Wersje

Z oficjalnej strony internetowej Pythona, www.python.org, można pobrać interpreter języka (do różnych platform) wraz dokumentacją, bibliotekami, przykładami i rozszerzeniami. W czasie przygotowywania ćwiczeń dostępna była wersja finalna 2.5.2 i wersja testowa 3.0b2.

Najprostszym sposobem uruchamiania poleceń Pythona jest praca w trybie interakcyjnym. Wpisujemy wtedy w wierszu poleceń instrukcje, które są natychmiast interpretowane. Ewentualne wyniki również wyświetlane są w tym trybie. 

Alternatywą dla trybu natychmiastowego jest uruchamianie interpretacji wcześniej napisanych i zapisanych na dysku skryptów.

Pisanie interpretowanych skryptów jest wygodną formą programowania, ale nie zawsze wystarczającą. W związku z potrzebą unifikacji bibliotek programistycznych i graficznego wspomagania programowania opracowano wersję IronPython, wykorzystująca platformę Microsoft.NET Framework. Dalszą ewolucją IronPythona jest wykorzystanie zalet graficznego wspomagania projektowania, które zapewnia Microsoft Visual Studio 2008. Tak powstało IronPython Studio. Obecnie dostępna jest jego wersja 1.0.

1.3. Visual Studio

Visual Studio integruje wiele środowisk programistycznych w postaci jednolitego interfejsu (IDE). Udostępnia środowisko, z którego korzystać mogą różne języki programowania. Microsoft dostosował do platformy.NET od lat znany i popularny Visual Basic, zmieniając go generalnie. VB.NET jest w pełni obiektowym językiem programowania. Dla użytkowników języków rodziny C opracowano na platformie.NET C# („C sharp”). Jest to nowoczesny, obiektowy język programowania, korzystający z wielu konstrukcji C++, ale bez zbędnych naleciałości historycznych. Visual C++ jest również obecny na tej platformie. Teraz dołączył do nich Python.

Wybór języka jest rzeczą drugorzędną – to jedna z zalet środowiska.NET. Integracja wielu języków w jednym środowisku powoduje, że nie musimy tracić czasu na uczenie się od początku nowych języków, aby tworzyć, uruchamiać i rozwijać aplikacje. Visual C# , Visual Basic i IronPython na platformie.NET dają nam podobne możliwości. Użycie zmiennych, klas, ich właściwości i metod jest w nich prawie  identyczne. Środowisko.NET (tzw. framework) oferuje wspólne typy danych (Common Type System) i biblioteki klas (.NET Class Framework). 

Potrzeby obecnych użytkowników oprogramowania wymagają, aby aplikacje dysponowały graficznymi interfejsami (były okienkowe). To z kolei rodzi wymagania względem środowisk programistycznych, które muszą być efektywne. Archaicznym podejściem do nauki programowania jest wykorzystywanie narzędzi, które nie zapewniają wspomagania graficznego w tworzeniu interfejsów, nie preferują programowania obsługującego zdarzenia i programowania obiektowego. Te pojęcia nie muszą oznaczać wyższego wtajemniczenia w sztukę programowania. Nie należy klasyfikować ich jako zbyt zaawansowane. Od nich musimy zaczynać nie tylko programowanie, ale już analizę problemu i projektowanie rozwiązania. Języki platformy.NET umożliwiają jak nigdy dotąd tworzenie programów obiektowych, sterowanych zdarzeniami i silnie wspomaganych graficznie. Od samego początku wykorzystujemy tutaj (przynajmniej pasywnie) właściwości i metody obiektów, nawet nie wspominając o nich. W sytuacjach, gdy interfejs graficzny jest zbędny lub przeszkadza w zgłębieniu istoty problemu, można zbudować aplikację konsolową.

Platforma.NET to nie tylko języki programowania. W wielu sytuacjach języki pełnią funkcję pomocniczą, służąc do zapisywania poleceń. W Visual Studio.NET znajdziemy Server Explorer, za pomocą którego możemy tworzyć tabele baz danych i łączyć je relacjami. Zbiór klas ADO.NET umożliwia z kolei zarządzanie bazami zarówno w tradycyjnym środowisku połączonym jak i w bardziej efektywnym i nowoczesnym środowisku rozłączonym. Do wykonania szeregu zadań, jak zapytania i modyfikacje relacyjnych baz danych wykorzystywać możemy popularny język SQL. Dane możemy zapisywać w coraz bardziej popularnym, niezależnym od platformy formacie XML.

Platforma.NET oferuje również (a może przede wszystkim) narzędzia do budowania aplikacji internetowych i zarządzania zasobami rozproszonymi. Biblioteka ASP.NET umożliwia tworzenie formularzy WWW. Usługi Web Services umożliwiają tworzenie nowoczesnych aplikacji rozproszonych. 

Platforma.NET stanowi środowisko uruchomieniowe, bibliotekę klas, kompilatory i narzędzia pomocnicze. 

Programy napisane do środowiska.NET Framework nie są kompilowane od razu do kodu maszynowego danego procesora, lecz do kodu pośredniego MSIL (Microsoft Intermediate Language ). Uruchomienie programu wymaga środowiska CLR  (Common Language Runtime), które jest częścią .NET Framework. Podczas pierwszego uruchomienia programu na maszynie docelowej kompilator Just In Time tworzy kod maszynowy specyficzny dla danego procesora. W uproszczeniu przedstawia to schemat na następnej stronie.

W systemach operacyjnych Windows niezbędne jest zainstalowanie pakietu .NET Framework, dostępnego bezpłatnie na stronach internetowych Microsoftu. Środowisko to wystarcza jako minimum, do pisania, kompilowania i uruchomiania programów w języku IronPython. Aby jednak efektywnie tworzyć kod źródłowy (korzystać z graficznego wspomagania i wielu innych narzędzi wspierających), kompilować go i wykrywać błędy, warto zaopatrzyć się w środowisko zintegrowane Visual Studio 2008 Shell Runtime i IronPython Studio.

Książka skierowana jest do Czytelników chcących poznać podstawy języka Python i pracę w środowisku IronPython Studio. Nie wymaga znajomości wstępnej tego języka ani innych narzędzi programistycznych. Korzystna może być jednak znajomość innych języków programowania, np. C++, Pascala, Javy. Zamieszczone w niej ćwiczenia, składnie poleceń i tabele mogą również służyć jako pomoc dla bardziej zaawansowanych programistów. 

Pliki do pobrania, zawierające ćwiczenia prezentowane w książce, umieszczone są na stronie Wydawnictwa Naukowego PWN. Wszystkie zostały uruchomione i sprawdzone w systemie operacyjnym Microsoft Windows.

2. Środowisko programowania

2.1. IronPython Studio – instalacja

Środowisko zintegrowane, IDE (Integrated Development Environment) – IronPython Studio można pobrać bezpłatnie ze strony: www.codeplex.com/IronPythonStudio. Plik instalacyjny znajdziemy pod nazwą IronPythonStudioIsolatedSetup lub IronPythonStudioIntegratedSetup. Przed instalacją tego środowiska należy jeszcze pobrać (również bezpłatnie) i zainstalować tzw. powłokę Visual Studio 2008 Shell Runtime, opartą na Visual Studio 2008 (również tutaj są dwa alternatywne pliki instalacyjne: Visual Studio 2008 Shell Isolated Mode Redistributable package i Visual Studio 2008 Shell Integrated Mode Redistributable package). 

Instalacja powłoki (Visual Studio 2008 Shell Runtime) może być trochę myląca. Po uruchomieniu jej z pliku instalacyjnego odpowiednia zawartość zostanie rozpakowana do folderu C:\VS 2008 Shell Redist\Isolated Mode. Nie jest to jeszcze koniec instalacji. Dalej należy otworzyć powyższy folder i uruchomić właściwą instalację z pliku vsshellisolated_enu.exe.

Dysponując płatną wersją Visual Studio 2008, wystarczy zainstalować plik IronPythonStudioIntegratedSetup, bez wcześniejszego instalowania powłoki.

2.2. Tryby pracy

W środowisku zintegrowanym IronPython Studio możemy używać kilku trybów pracy lub inaczej wykorzystywać różne szablony. 

Podstawowym szablonem jest Windows Application, służący do tworzenia programów okienkowych. W tym trybie otrzymujemy dużą pomoc w postaci automatycznego utworzenia kodu wstępnego, narzędzi graficznych, w postaci kontrolek z przybornika Toolbox i podpowiedzi podczas pisania kodu (IntelliSense).

Rysunek 2.1.  Windows Application

Gdy zbędny jest interfejs graficzny, aplikacje możemy tworzyć, korzystając z szablonu konsolowego Console Application.

Rysunek 2.2.  Console Application

Python znany jest z możliwości pracy w trybie natychmiastowym – interpretacji kolejnych wierszy kodu bez tworzenia kompilatu. W środowisku IronPython Studio ten tryb odnajdziemy w oknie IronPython Console.

Rysunek 2.3.  Tryb natychmiastowy

Ćwiczenia będziemy realizować, korzystając przede wszystkim z szablonu Windows Application. Sporadycznie jednak zastosujemy Console Application. Drobne ćwiczenia, związane z poznawaniem gramatyki Pythona, wykonamy natomiast w trybie natychmiastowym.

W obecnej wersji IronPython Studio (1.0), w projektach typu Windows Application edytor niewłaściwie interpretuje znaki tabulacji, powodując powstawanie w miejscach wcięć błędów kompilacji. Można się ich pozbyć, zmieniając ustawienia Tab size w oknie Options – Text Editor | All Languages | Tabs. Znajdziemy je w menu Tools. Wprowadzimy tu maksymalną wartość, czyli 60 spacji. 

Rysunek 2.4.  Tu należy poprawić wartość Tab size

3. Pierwsze próby

Środowiska zintegrowane zwalniają nas z ręcznego pisania całego kodu, oferując graficzne wspomaganie podczas wybierania typu aplikacji i wstawiania poszczególnych komponentów. Znacząco przyśpiesza to tworzenie programu i wyręcza programistę od pamięciowego opanowywania wielu szczegółów.

Ćwiczenie 1. Zaczynamy

Uruchomimy IronPython Studio i klikniemy pierwszy przycisk na pasku narzędzi, czyli New Project. 

W oknie dialogowym New Project wybierzemy typ projektu (Templates) – Windows Application, określimy własną nazwę projektu (zostanie automatycznie utworzony katalog o podanej nazwie) i wybierzemy lokalizację na dysku. 

Rysunek 3.1.  New Project

Po otwarciu projektu zobaczymy projekt formularza i kilka innych okien (rysunek 2.1). Projekt formularza będzie oknem naszej aplikacji. 

W prawym dolnym narożniku ekranu znajdziemy okno właściwości (Properties), w którym wybierzemy właściwość formularza: Text. Wpiszemy tam Pierwszy program. Będzie to tytuł naszego formularza. 

Rysunek 3.2.  Okno Properties

Na formularzu umieścimy napis (etykietę): „Witaj w IronPython Studio”. Zrobimy to, wykorzystując przybornik (Toolbox), zawierający różne kontrolki (inaczej formanty). Po rozwinięciu przybornika wybierzemy kontrolkę Label i naniesiemy ją na formularz (przeciągając myszą). W oknie Properties, które automatycznie wyświetla właściwości wybranego formantu, odszukamy pozycję Text i wpiszemy swój tekst. 