210 likes | 319 Views
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
E N D
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. Wstęp
–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! Wstęp, cd.
–nawetfunkcje 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.) Przenoszenie kodu – problemy
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) Wyniki testu kompatybilności
- 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 - 1s na Linux, 8 s na Windows - typowy wpływ to ok . 20% czasu programu - szybka grafika 3d lepsza pod Windows Inne różnice między kompilatorami C++
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 Narzędzia i biblioteki ułatwiające przenoszenie kodu
biblioteki do znanych języków oprogramowania: wxWindows (C++, Python, Basic i inne) QT (C++) Narzędzia i biblioteki ułatwiające przenoszenie kodu, cd.
– 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 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) 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 wxWindows – wprowadzenie
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 wxWindows – historia
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 wxWindows – interfejs
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), ... wxWindows – klasy
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ęciaw 2001 oceniana była przez niezależnych analityków na 41,000,000 $) wxWindows – klasy, cd.
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 wxWindows – różne
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 QT – opis
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 dekompresja Kto jeszcze go używa: Lockheed-Martin, Netscape, Xerox, NASA, AMD, Intel Graphics Lab, Compaq, California Institute of Technology, REDSonic, ... Aplikacje rozwinięte przy użyciu opisanych bibliotek
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.
–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ń PODSUMOWANIE Cały wykład ( slajdy, szerszy opis i w przyszłości opracowanie ) znajduje się w sieci na stronie www.mardo.prv.pl