Programowanie wieloplatformowe – przenośność kodu

21
Programowanie wieloplatformowe, Tomasz Mularczyk Programowanie wieloplatformowe – przenośność kodu

description

Programowanie wieloplatformowe – przenośność kodu. kiedy ś prog ramy pisane pod konkretną maszyn ę system op eracyjny wszyty przez producenta bardziej uniwersalne platformy -> os niezale ż ny wreszcie zlecanie zewn ę trznym firmom pisania OSów - PowerPoint PPT Presentation

Transcript of Programowanie wieloplatformowe – przenośność kodu

Page 1: Programowanie wieloplatformowe – przenośność kodu

Programowanie wieloplatformowe, Tomasz Mularczyk

Programowanie wieloplatformowe – przenośność kodu

Page 2: Programowanie wieloplatformowe – przenośność kodu

2

Programowanie wieloplatformowe, Tomasz Mularczyk

Wstęp

•        kiedyś programy pisane pod konkretną maszynę

•        system operacyjny wszyty przez producenta

•        bardziej uniwersalne platformy -> os niezależny

•        wreszcie zlecanie zewnętrznym firmom pisania OSów

•        MS-DOS (1981) rok na zlecenie IBM (przystosowanie 86-QDOSa)

•        niedługo później PC-DOS (IBM) oraz DR-DOS (Digital Research)

•         sukces PC nie był pewny, MS-DOS miał być raczej niszowym produktem,

• tymczasem w 1991 w USA było 50 mln kopii

•        Windows 1.0 – 1984

•        Windows 3.0 – 1990

– dziesięć lat po DOSie – Linux (dziecko Linusa Torvaldsa), na podobieństwo Unixa, który powstał w 1969 r.

Page 3: Programowanie wieloplatformowe – przenośność kodu

3

Programowanie wieloplatformowe, Tomasz Mularczyk

Wstęp, cd.

• –       Potrzeba przenoszenia progów między nimi.

• –       Systemy stworzone do różnych zadań nie wymagają tego, natomiast systemy

• ogólnego zastosowania jak Windows XP czy Linux tak

• –       czemu nie wymieniać najlepszych aplikacji

• –       praktyka pokazuje, że nie jest to takie łatwe

• –       na razie wybór OS rzutuje na programy

• –       część firm sprzedaje różne wersje na różne OSy

• –       np. Płatnik nie :)

• powody :

• –       lekceważenie grup użytkowników najczęściej związanych z darmowym softem

• –       faworyzowanie monopolisóów

• –       brak fachowej wiedzy

• A DZIŚ DO DYSPOZYCJI MAMY SPORO DOBRYCH I DARMOWYCH NARZĘDZI!

Page 4: Programowanie wieloplatformowe – przenośność kodu

4

Programowanie wieloplatformowe, Tomasz Mularczyk

Przenoszenie kodu – problemy

• –       nawet funkcje standardowe nie gwarantują przeniesienia

• –       różne wyniki lub brak startu na innym OSie

• –       Opiszę na C++

• –       STL (standard template library) rozbudowane, wymagana dobra wydajność

• –       duży nakład pracy, aby twórcy kompilatora zaimplementowali

• –       nawet najwięksi twórcy IDE do C++ - MS, Borland rezygnują z części funkcji

• –       czasem istnieją, ale robią co innego (obsługa szablonów w VC++ 6.0)

• różnica między sztandarowymi komp. Win – VC++ i Lin – gcc jest bardzo długa (obsługa plików nagłówkowych, rozwijanie funkcji inline, szablony etc.)

Page 5: Programowanie wieloplatformowe – przenośność kodu

5

Programowanie wieloplatformowe, Tomasz Mularczyk

Wyniki testu kompatybilności

• Wyniki przeprowadzonego testu kompatybilności ze standardem:

• % zgodności nazwa kompilatora

• 99+ Microsoft VC++ V7 (.NET), included library supplied by Dinkumware

• 97 Microsoft VC++ V6, added Dinkum C++ Library for VC++ V3.08

• 93 Metrowerks CodeWarrior for Windows V8.0, included library

• 89 Sun Forte Developer 7 C++ V5.4, included STLport library (optional)

• 88 Borland C++Builder V6, included STLport library (default)

• 86 GCC V3.2, included LibStdC++ library

• 84 Microsoft VC++ V6, included library supplied by Dinkumware

• 80 Sun Forte Developer 7 C++ V5.4, included RogueWave library (default)

• 77 Borland C++Builder V6, included RogueWave library (optional)

Page 6: Programowanie wieloplatformowe – przenośność kodu

6

Programowanie wieloplatformowe, Tomasz Mularczyk

Inne różnice między kompilatorami C++

• - poza zgodnością różnice w wydajności

• - przydział pamięci pod gcc szybciej o rząd wielkości niż w VC++

• - gcc nie monitoruje tak skrupulatnie pamięci

• - 1 s na Linux, 8 s na Windows

• - typowy wpływ to ok . 20% czasu programu

• - szybka grafika 3d lepsza pod Windows

Page 7: Programowanie wieloplatformowe – przenośność kodu

7

Programowanie wieloplatformowe, Tomasz Mularczyk

Narzędzia i biblioteki ułatwiające przenoszenie kodu

Języki zaprojektowane jako przenośne – m.in. Java

 

–       maszyna wirtualna, której funkcje są zaimplementowane niezależnie dla każdego OSu

–       bardzo wolna, o ile nie wykorzystuje się instrukcji udostępnianych przez konkretny OS lub

procesor – a wtedy strata przenośności

–       minus – trzeba zainstalować MW javy, więc nasz program ma wymagania co do bibliotek

nieobecnych w systemie.

–       Czasem programy zachowują się inaczej na różnych wersjach MW lub wymagają

dodatkowych bibliotek

–       Może kiedyś będzie szybka, na razie za uniwersalność płacimy spadkiem wydajności

Jest mimo to całkiem dobrym pomysłem

Page 8: Programowanie wieloplatformowe – przenośność kodu

8

Programowanie wieloplatformowe, Tomasz Mularczyk

Narzędzia i biblioteki ułatwiające przenoszenie kodu, cd.

biblioteki do znanych języków oprogramowania:  

wxWindows (C++, Python, Basic i inne)

QT (C++)

Page 9: Programowanie wieloplatformowe – przenośność kodu

9

Programowanie wieloplatformowe, Tomasz Mularczyk

wxWindows – wprowadzenie

 

–       wxWindows jest zbiorem bibliotek

–       całość zaprojektowana jako system klas (łatwo rozwijać funkcjonalność poprzez

dziedziczenie, łatwo modyfikować już istniejące klasy)

–       po 1 bibliotece na każdy interfejs użytkownika (windows, GTK+, Motif, Mac)

–       udostępnia pełne API w C++ oraz ograniczone w kilku innych językach - Python, Basic

–       praca na plikach

–       obsługa sieci, w tym socketów

–       obsługa wątków

Page 10: Programowanie wieloplatformowe – przenośność kodu

10

Programowanie wieloplatformowe, Tomasz Mularczyk

wxWindows – wprowadzenie

–       zawiera podstawowe struktury danych – string (łańcuchy), tablice, listy, tablice haszujące

–       wbudowana obsługa html- a (prosta w użyciu)

–       wirtualne systemy plików

–       obsługa OpenGL

–       duże rozposzechnienie, łatwy dostęp do pomocy i innych zasobów (>20k stron www)

–       łatwy do nauczenia (wszystko jest pod ręką - przykłady, sensowny podział na klasy)

–       dobrze współpracuje z innymi technologiami specyficznymi dla platformy (np. z MFC w Windowsach)

Page 11: Programowanie wieloplatformowe – przenośność kodu

11

Programowanie wieloplatformowe, Tomasz Mularczyk

wxWindows – wprowadzenie

–       obsługa drukowania

–       zintegrowany z systemem debugger (specjalna klasa komunikująca się z innymi)

–       wsparcie dla Unicode

–      minusy:

- nie pozwala na obsługę wyjątków w ramach swoich klas

- nie ma szablonów (tylko klasę pseudoszablonów), choć pozwala korzystać np. z szablonów STL

Page 12: Programowanie wieloplatformowe – przenośność kodu

12

Programowanie wieloplatformowe, Tomasz Mularczyk

wxWindows – historia

        Minimum historii wxWindows:1992 rok. Julian Smart ( pracując w Artificial Intelligence Applications Institute w University of Edinburgh) potrzebuje biblioteki, która działa w windows i na opartych na X uniksowych stacjach roboczych.

Istniejące rozwiązania są dla niego zbyt drogie. Pisze wxWindows

w – windows

x – uniksowy X

1996 – lekka stagnacja. Szybki rozwój technologii javowych. Pytanie, czy ktoś potrzebuje

bibliotek do C++ ? Dodatkowo kod był już mocno pogmatwany (wiele osób go tworzyło). Przepisać albo porzucić. Decyzja – pisać. Obsługa GTK+

1998 – port na Macitosha

2000 – dodanie wewnętrznej obsługi html-a

dziś – port na OS/2

Page 13: Programowanie wieloplatformowe – przenośność kodu

13

Programowanie wieloplatformowe, Tomasz Mularczyk

wxWindows – interfejs 

Ten sam kod dla wszystkich platform

wxWindows API

wxMSW wxX11

wxGTK wxMotif

wxMac wxBase

GDI Xlib/X11

GTK+ Motif Mac BEZ GUI

Windows

Unix(1) MacOS Windows

Unix(1)

MacOS

OS/2

Page 14: Programowanie wieloplatformowe – przenośność kodu

14

Programowanie wieloplatformowe, Tomasz Mularczyk

wxWindows – klasy

        Przykładowe klasy wxWindows:wszystkie dziedziczą z wxObject

 

–       Związane z interfejsem graficznym :

wxBitmap, wxButton, wxBitmapButton, wxBrush, wxCheckBox, wxColour(rep. Kolorów), wxComboBox, wxDC (Device Context – bezp. Operacje na oknach wzorowane na rozwiązaniu z Windows), wxFont, wxGrid (siatka do tabel), wxListBox, wxMenu, wxPoint, wxRect,wxDCClipper, ...

 

–       Związane z plikami:

wxFile, wxFileStream, wxFFile (buforowany dostęp), wxFileSystem (ciekawa, pozwala na dostęp do własnego systemu plików niezależnego od OSu), ...

Page 15: Programowanie wieloplatformowe – przenośność kodu

15

Programowanie wieloplatformowe, Tomasz Mularczyk

wxWindows – klasy, cd.

        Przykładowe klasy wxWindows, część druga:

–       Klasy wspomagające programowanie i algorytmy:

wxArray, wxArrayString,wxList, wxDatabase (reprezentacja bazy ODBC), wxMutex (wsparcie dla wielowątkowości), wxString, wxHashTable, ...

–       Klasy różne:

wxWave (dźwięk), wxFileDialog (menu wybóru plików, katalogów) i setki innych

W sumie ponad 300 klas, 5000 funkcji, 1,3 MLN linijek kodu, wartość przedsięwzięcia w 2001 oceniana była przez niezależnych analityków na 41,000,000 $)

Page 16: Programowanie wieloplatformowe – przenośność kodu

16

Programowanie wieloplatformowe, Tomasz Mularczyk

wxWindows – różne

Licencja:

–     wiele różnych

–     GPL, freeware, komercjalna

–     dlatego też jest tak lubiany i popularny

 

Ciekawy pomysł z "wielkościowaniem" okna. Klasa wxSizer pozwala na podział ekranu na części funkcjonalne. Ułatwia przenoszenie, jeśli różne jednostki i wymiary ekranów na różnych platformach.

Podręcznik do wxWindows ma 1700 stron, dokumentacja jest rozprowadzana z programem.

STRONA WWW: www.wxwindows.org

Page 17: Programowanie wieloplatformowe – przenośność kodu

17

Programowanie wieloplatformowe, Tomasz Mularczyk

QT – opis

QT: (produkt norweskiej firmy TrollTech)

–       wxWindows nie jest jedyny

–     QT jest bardzo popularny pod Linuksem

–       1550 $ najtańsza, 1-stanowiskowa wersja komercjalna

–       wersje GPL dla Linuxa, Maca i innych, ale tylko na tworzenie darmowego softu

( niekomercyjna )

–       również jest to system klas

–       w przeciwieństwie do wxWindows, gdzie nie ma świetnych "wizardów", tutaj są

STRONA WWW: www.trolltech.com

Page 18: Programowanie wieloplatformowe – przenośność kodu

18

Programowanie wieloplatformowe, Tomasz Mularczyk

QT – klasy

Page 19: Programowanie wieloplatformowe – przenośność kodu

19

Programowanie wieloplatformowe, Tomasz Mularczyk

Aplikacje rozwinięte przy użyciu opisanych bibliotek

wxWindows:–       StoryLines ( narzędzie do pisania scenariuszy, wygląda jak wave-editor + edytory okładek)–       Audacity audio editor–       Intuitive (mixer muzyki, wykorzystuje grafikę 3D)–       HelpBlocks (edytor helpa, obsługa htmla)–       Ground Control Station for Unmanned Planes, Geneva Aerospace–       VULCAN - modelowanie 3D dla kopalni–       cn3D – dla National Center for Biotechnology Information (USA), oglądanie sekwencji

nukleotydów, białek, a nawet całego genomu–       Zeemo (wymiana plików p2p)–       Flakarchiver - zarządznie archiwami, kompresja i dekompresjaKto jeszcze go używa:Lockheed-Martin, Netscape, Xerox, NASA, AMD, Intel Graphics Lab, Compaq, California Institute of Technology, REDSonic, ...

Page 20: Programowanie wieloplatformowe – przenośność kodu

20

Programowanie wieloplatformowe, Tomasz Mularczyk

QT:

sporo ogólnodostępnych aplikacji pod Linuksem (firma centralnie się nimi nie chwali)

ponadto jest używana w:

–       Boeing

–       Canon

–       Shell

–       Sony

–       NASA

–       Pioneer

–       IBM

–       Siemens

Aplikacje rozwinięte przy użyciu opisanych bibliotek, cd.

Page 21: Programowanie wieloplatformowe – przenośność kodu

21

Programowanie wieloplatformowe, Tomasz Mularczyk

PODSUMOWANIE

–       Programowanie na kilka platform wcale nie jest trudne.

–       Mamy w ręku przynajmniej 2 podejścia – biblioteki do znanych nam języków programowania

lub cały język prog.

–       istnieją dobre narzędzia, warto od razu zaprojektować aplikację jako wielosystemową

–       wielkie firmy korzystają już z proponowanych rozwiązań

Cały wykład ( slajdy, szerszy opis i w przyszłości opracowanie ) znajduje się w sieci na stronie www.mardo.prv.pl