Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00369 009661 10453599 na godz. na dobę w sumie
C++. Biblioteka IOStreams i lokalizacja programów - książka
C++. Biblioteka IOStreams i lokalizacja programów - książka
Autor: , Liczba stron: 608
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-739-6 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> c++ - programowanie
Porównaj ceny (książka, ebook, audiobook).
>> Możesz kupić komplet w niższej cenie!

Opanuj biblioteki strumieni i lokalizacji

Biblioteka strumieni (IOStreams) oraz biblioteka lokalizacji to jedne z najważniejszych komponentów języka C++, wykorzystywane przy dostowywaniu aplikacji do wymogów językowych krajów, w których są wydawane i wykorzystywane. Biblioteki te stosuje się do sterowania formatowaniem tekstów, definiowania własnych mechanizmów formatujących oraz tworzenia wersji językowych oprogramowania. Jednakże pomimo wielkiej wagi tych bibliotek, poświęcona im dokumentacja jest wyjątkowo skąpa -- trudno znaleźć kompletne omówienie znajdujących się w nich klas oraz sposobów ich wykorzystania we własnych aplikacjach.

Książka 'C++. Biblioteka IOStreams i lokalizacja programów' wypełnia tę lukę. Zawiera ona opis oraz dokumentację programistyczną klas biblioteki IOStreams i lokalizacji, a także prezentuje sposoby ich wykorzystywania i zaawansowane metody rozszerzania i dostosowywania do własnych potrzeb. Przedstawia zagadnienia związane z tworzeniem wersji językowych aplikacji i dostosowywania ich do lokalnych konwencji językowo-kulturowych.

Jeśli planujesz implementację własnych mechanizmów lokalizacji programów, ta książka będzie dla Ciebie doskonałym źródłem informacji.

O autorach:
Angelika Langer pracowała jako programista i szkoleniowiec w Rogue Wave Software, występuje na międzynarodowych konferencjach poświęconych zagadnieniom projektowania i programowania obiektowego. [więcej...\

Klaus Kreft jest głównym konsultantem w Siemens Business Service, pracował jako starszy konsultant w Rogue Wave Software oraz jako projektant systemów w Siemensie. [więcej...\

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl C++. Biblioteka IOStreams i lokalizacja programów Autorzy: Angelika Langer, Klaus Kreft T³umaczenie: Przemys³aw Szeremiota ISBN: 83-7361-739-6 Tytu³ orygina³u: Standard C++ IOStremas and Locales Format: B5, stron: 608 Opanuj biblioteki strumieni i lokalizacji • Poznaj budowê i architekturê biblioteki strumieni • Zastosuj standardowe mechanizmy lokalizacji • Stwórz w³asne us³ugi internacjonalizacji programów Biblioteka strumieni (IOStreams) oraz biblioteka lokalizacji to jedne z najwa¿niejszych komponentów jêzyka C++, wykorzystywane przy dostowywaniu aplikacji do wymogów jêzykowych krajów, w których s¹ wydawane i wykorzystywane. Biblioteki te stosuje siê do sterowania formatowaniem tekstów, definiowania w³asnych mechanizmów formatuj¹cych oraz tworzenia wersji jêzykowych oprogramowania. Jednak¿e pomimo wielkiej wagi tych bibliotek, poġwiêcona im dokumentacja jest wyj¹tkowo sk¹pa — trudno znaleĥæ kompletne omówienie znajduj¹cych siê w nich klas oraz sposobów ich wykorzystania we w³asnych aplikacjach. Ksi¹¿ka „C++. Biblioteka IOStreams i lokalizacja programów” wype³nia tê lukê. Zawiera ona opis oraz dokumentacjê programistyczn¹ klas biblioteki IOStreams i lokalizacji, a tak¿e prezentuje sposoby ich wykorzystywania i zaawansowane metody rozszerzania i dostosowywania do w³asnych potrzeb. Przedstawia zagadnienia zwi¹zane z tworzeniem wersji jêzykowych aplikacji i dostosowywania ich do lokalnych konwencji jêzykowo-kulturowych. • Formatowanie wejġcia i wyjġcia • Operacje na strumieniach plikowych • Synchronizowanie strumieni • Architektura biblioteki IOStreams • Internacjonalizacja i lokalizacja programów • Szkielet lokalizacji • Definiowanie w³asnych aspektów lokalizacji Jeġli planujesz implementacjê w³asnych mechanizmów lokalizacji programów, ta ksi¹¿ka bêdzie dla Ciebie doskona³ym ĥród³em informacji. Spis treści Słowo wstępne .......................................................................................................11 Wstęp .....................................................................................................................13 Wskazówki dla Czytelników .................................................................................17 Część I Strumieniowe wejście-wyjście 23 1. Podstawy biblioteki IOStreams..............................................................................25 1.1. Wejście i wyjście.....................................................................................................................................25 1.2. Formatowanie wejścia i wyjścia..............................................................................................................33 1.2.1. Strumienie globalne biblioteki IOStreams....................................................................................33 1.2.2. Operatory wejścia i wyjścia..........................................................................................................34 1.2.3. Parametry formatowania strumienia .............................................................................................37 1.2.4. Manipulatory ................................................................................................................................43 1.2.5. Lokalizacja strumienia..................................................................................................................47 1.2.6. Formatowanie wejścia i wyjścia — porównanie...........................................................................48 1.2.7. Jeszcze o formatowaniu wejścia ...................................................................................................49 1.3. Stan strumienia........................................................................................................................................51 1.3.1. Znaczniki stanu strumienia ...........................................................................................................52 1.3.2. Kontrola stanu strumienia.............................................................................................................54 1.3.3. Przechwytywanie wyjątków strumieni .........................................................................................56 1.3.4. Zerowanie stanu strumienia ..........................................................................................................58 1.4. Operacje wejścia-wyjścia na strumieniach plikowych ............................................................................59 1.4.1. Tworzenie, otwieranie, zamykanie i usuwanie strumieni plikowych............................................60 1.4.2. Tryby otwierania strumieni plikowych .........................................................................................61 1.4.3. Dwukierunkowe strumienie plikowe ............................................................................................65 1.5. Operacje wejścia-wyjścia na strumieniach w pamięci ............................................................................67 1.6. Wejście i wyjście bez formatowania .......................................................................................................69 4 SPIS TREŚCI 1.7. Pozycjonowanie w strumieniu.................................................................................................................71 1.8. Synchronizacja strumieni ........................................................................................................................73 1.8.1. Środki synchronizacji ...................................................................................................................74 1.8.1.1. Synchronizacja wywołaniami flush() i sync()..................................................................74 1.8.1.2. Synchronizacja za pośrednictwem znacznika formatu unitbuf ........................................75 1.8.1.3. Synchronizacja przez wiązanie strumieni ........................................................................75 1.8.2. Synchronizacja predefiniowanych strumieni standardowych .......................................................76 1.8.2.1. Synchronizacja pomiędzy predefiniowanymi strumieniami standardowymi ...................77 1.8.2.2. Synchronizacja predefiniowanego strumienia z jego analogiem w postaci standardowego pliku wejścia-wyjścia języka C..............................................................77 1.8.2.3. Synchronizacja predefiniowanego strumienia standardowego ze skojarzonym z nim urządzeniem zewnętrznym..........................................................78 1.8.2.4. Synchronizacja pomiędzy strumieniami znaków zwykłych i poszerzonych....................78 2. Architektura biblioteki IOStreams.........................................................................79 2.1. Klasy strumieni .......................................................................................................................................80 2.1.1. Hierarchia klas..............................................................................................................................81 2.1.1.1. Bazowe klasy strumieni ...................................................................................................81 2.1.1.2. Ogólne klasy strumieni ....................................................................................................84 2.1.1.3. Konkretne klasy strumieni ...............................................................................................85 2.1.2. Zarządzanie buforem strumienia...................................................................................................86 2.1.3. Kopiowanie i przypisania obiektów strumieni..............................................................................89 2.1.4. Zarządzanie lokalizacjami strumieni.............................................................................................92 2.1.5. Współpraca obiektów strumieni, buforów strumieni i lokalizacji.................................................96 2.2. Klasy buforów strumieni.......................................................................................................................100 2.2.1. Hierarchia klas............................................................................................................................101 2.2.2. Abstrakcja bufora strumienia......................................................................................................102 2.2.3. Bufory strumieni ciągów znaków ...............................................................................................107 2.2.4. Bufory strumieni plikowych .......................................................................................................113 2.3. Typy i cechy znakowe...........................................................................................................................122 2.3.1. Reprezentacje znaków ................................................................................................................122 2.3.2. Cechy znakowe...........................................................................................................................127 2.3.2.1. Wymagania odnośnie typu cechy znakowej ..................................................................127 2.3.2.2 Predefiniowane standardowe typy cech znakowych .......................................................131 2.3.3. Typy znakowe.............................................................................................................................132 2.3.3.1. Wymagania dla typów znakowych ................................................................................132 2.4. Iteratory strumieni i buforów strumieni.................................................................................................135 2.4.1. Koncepcja iteratorów w bibliotece standardowej .......................................................................136 2.4.2. Iteratory strumieni ......................................................................................................................138 2.4.2.1. Iterator strumienia wyjściowego....................................................................................139 2.4.2.2. Iterator strumienia wejściowego ....................................................................................140 2.4.2.3. Iteratory strumieni a jednoprzebiegowość .....................................................................144 2.4.3. Iteratory buforów strumieni ........................................................................................................146 2.4.3.1. Iterator bufora strumienia wyjściowego.........................................................................146 2.4.3.2. Iterator bufora strumienia wejściowego.........................................................................147 2.5. Dodatkowa pamięć obiektu strumienia i wywołania zwrotne ...............................................................150 2.5.1. Dodatkowa pamięć obiektu strumienia.......................................................................................151 2.5.2. Wywołania zwrotne strumieni ....................................................................................................153 SPIS TREŚCI 5 3. Zaawansowane zastosowania biblioteki IOStreams ............................................155 3.1. Wejście i wyjście dla typów definiowanych przez użytkownika ..........................................................155 3.1.1. Sygnatury inserterów i ekstraktorów ..........................................................................................156 3.1.2. Pierwsze własne insertery i ekstraktory ......................................................................................156 3.1.3. Udoskonalenia ............................................................................................................................159 3.1.3.1. Sterowanie formatowaniem ...........................................................................................160 3.1.3.2. Operacje wstępne i likwidacyjne ...................................................................................161 3.1.3.3. Sygnalizowanie błędów .................................................................................................162 3.1.3.4. Umiędzynarodowienie ...................................................................................................163 3.1.3.5. Operacje wejścia-wyjścia...............................................................................................165 3.1.4. Udoskonalone wersje insertera i ekstraktora daty.......................................................................165 3.1.4.1. Umiędzynarodawianie daty............................................................................................165 3.1.4.2. Czynności wstępne i likwidacyjne.................................................................................167 3.1.4.3. Sterowanie formatowaniem ...........................................................................................168 3.1.4.4. Sygnalizacja błędów ......................................................................................................169 3.1.4.5. Zastosowanie udoskonalonego insertera i ekstraktora ...................................................176 3.1.5. Ogólne wersje insertera i ekstraktora..........................................................................................177 3.1.6. Wersja prosta a udoskonalona ....................................................................................................182 3.2. Manipulatory definiowane przez użytkownika .....................................................................................184 3.2.1. Manipulatory bezparametrowe ...................................................................................................185 3.2.2. Manipulatory sparametryzowane................................................................................................187 3.2.2.1. Proste implementacje manipulatorów z parametrami ....................................................187 3.2.2.2. Wersja uogólniona — szablon klasy bazowej manipulatora..........................................188 3.2.2.3. Warianty implementacji manipulatora...........................................................................192 3.2.2.4. Udoskonalenia ...............................................................................................................194 3.2.2.5. Typ bazowy manipulatorów standardowych — smanip ................................................198 3.3. Rozszerzanie funkcji strumienia............................................................................................................199 3.3.1. Własne zastosowania dodatkowej pamięci strumienia — iword, pword i xalloc........................199 3.3.1.1. Inicjalizacja i utrzymywanie indeksu pary iword-pword ...............................................202 3.3.1.2. Implementacja insertera dat ...........................................................................................202 3.3.1.3. Implementacja manipulatora..........................................................................................204 3.3.1.4. Zarządzanie pamięcią za pośrednictwem wywołań zwrotnych strumieni......................206 3.3.1.5. Sygnalizowanie błędów funkcji wywołań zwrotnych....................................................211 3.3.1.6. Stosowanie nowych funkcji ...........................................................................................213 3.3.1.7. Ocena metody wykorzystującej pola iword-pword........................................................213 3.3.2. Wyprowadzanie nowych klas strumieni .....................................................................................215 3.3.2.1. Wyprowadzanie nowej klasy strumienia........................................................................216 3.3.2.2. Implementacja insertera i manipulatora .........................................................................223 3.3.2.3. Podsumowanie...............................................................................................................226 3.3.3. Porównanie techniki iword-pword i rozbudowy hierarchii klas..................................................227 3.4. Rozszerzanie funkcji bufora strumienia ................................................................................................229 3.4.1. Wyprowadzanie z klasy bazowej bufora strumienia...................................................................230 3.4.1.1. Rdzenne funkcje buforów strumieni — transport znaków.............................................230 3.4.1.2. Opcjonalne funkcje buforów strumieni..........................................................................246 3.4.1.3. Udostępnianie nowych klas strumieni z nowymi klasami buforów strumieni ...............248 3.4.2. Wyprowadzanie pochodnych konkretnych klas buforów strumieni ...........................................248 6 Część II Internacjonalizacja SPIS TREŚCI 251 4. Wprowadzenie do internacjonalizacji i lokalizacji..............................................253 4.1. Internacjonalizacja a lokalizacja ...........................................................................................................253 4.2. Konwencje kulturowe ...........................................................................................................................254 4.2.1. Język...........................................................................................................................................255 4.2.2. Wartości liczbowe ......................................................................................................................255 4.2.3. Wartości pieniężne......................................................................................................................255 4.2.4. Godziny i daty ............................................................................................................................256 4.2.5. Porządek alfabetyczny ................................................................................................................257 4.2.6. Komunikaty ................................................................................................................................258 4.2.7. Kodowanie znaków ....................................................................................................................258 4.2.7.1. Pojęcia i definicje...........................................................................................................258 4.2.7.2. Zestawy znaków ............................................................................................................259 4.2.7.3. Metody kodowania znaków ...........................................................................................260 4.2.7.4. Zastosowania metod kodowania wielobajtowego i znaków poszerzonych....................263 4.2.7.5. Konwersje kodowania....................................................................................................264 5. Lokalizacja...........................................................................................................267 5.1. Tworzenie obiektów lokalizacji ............................................................................................................269 5.1.1. Nazwane obiekty lokalizacji.......................................................................................................269 5.1.2. Lokalizacje kombinowane ..........................................................................................................270 5.1.3. Lokalizacja globalna...................................................................................................................272 5.2. Pobieranie aspektów z lokalizacji .........................................................................................................273 5.2.1. Funkcja has_facet .......................................................................................................................273 5.2.2. Funkcja use_facet .......................................................................................................................274 6. Aspekty standardowe...........................................................................................277 6.1. Aspekty językowe i alfabetyczne..........................................................................................................278 6.1.1. Klasyfikacja znaków...................................................................................................................278 6.1.1.1. Klasyfikacja znaków......................................................................................................278 6.1.1.2. Konwersja znaków liter małych i wielkich ....................................................................279 6.1.1.3. Konwersja znaków pomiędzy typami charT i char ........................................................280 6.1.1.4. Właściwości specjalne aspektu ctype char .................................................................281 6.1.2. Porządkowanie ciągów ...............................................................................................................281 6.1.3. Konwersja kodowania.................................................................................................................283 6.1.4. Katalogi komunikatów................................................................................................................287 6.2. Aspekty formatowania i analizy leksykalnej.........................................................................................287 6.2.1. Wartości liczbowe i logiczne......................................................................................................288 6.2.1.1. Aspekt numpunct ...........................................................................................................288 6.2.1.2. Aspekt num_put.............................................................................................................289 6.2.1.3. Aspekt num_get .............................................................................................................290 SPIS TREŚCI 7 6.2.2. Wartości pieniężne......................................................................................................................291 6.2.2.1. Aspekt moneypunct .......................................................................................................292 6.2.2.2. Aspekt money_put .........................................................................................................293 6.2.2.3. Aspekt money_get .........................................................................................................294 6.2.3. Wartości daty i czasu ..................................................................................................................296 6.2.3.1. Aspekt time_put.............................................................................................................297 6.2.3.2. Aspekt time_get.............................................................................................................298 6.3. Grupowanie aspektów standardowych w obiektach lokalizacji ............................................................300 6.3.1. Rodziny aspektów standardowych..............................................................................................300 6.3.1.1. Szablony klas bazowych aspektów standardowych .......................................................300 6.3.1.2. Aspekty byname ............................................................................................................301 6.3.1.3. Zachowanie klasy bazowej aspektów ............................................................................302 6.3.1.4. Obowiązkowe typy aspektów ........................................................................................303 6.3.2. Kategorie lokalizacji...................................................................................................................305 6.3.3. Diagram kategorii aspektów .......................................................................................................305 6.4. Zaawansowane zastosowania aspektów standardowych .......................................................................307 6.4.1. Użycie aspektu za pośrednictwem obiektu strumienia................................................................307 6.4.2. Użycie aspektu za pośrednictwem obiektu lokalizacji................................................................308 6.4.3. Użycie aspektu wprost, niezależnie od obiektu lokalizacji .........................................................310 7. Architektura szkieletu lokalizacji ........................................................................313 7.1. Hierarchia klas ......................................................................................................................................313 7.2. Identyfikacja i wyszukiwanie aspektów w lokalizacjach ......................................................................313 7.2.1. Identyfikacja aspektów ...............................................................................................................314 7.2.2. Wyszukiwanie aspektów.............................................................................................................317 7.2.2.1. Pobieranie aspektu z obiektu lokalizacji ........................................................................317 7.2.2.2. Umieszczanie aspektów w obiekcie lokalizacji .............................................................321 7.2.2.3. Uzasadnienie dla zastosowania polimorfizmu dwufazowego ........................................321 7.3. Zarządzanie pamięcią aspektów w obiektach lokalizacji ......................................................................322 7.3.1. Licznik odwołań aspektu ............................................................................................................322 7.3.2. Niezmienność aspektów w obiekcie lokalizacji..........................................................................327 8. Aspekty definiowane przez użytkownika ............................................................329 8.1. Dodawanie własnego aspektu do istniejącej rodziny aspektów.............................................................329 8.2. Definiowanie nowej rodziny aspektów .................................................................................................333 Dodatki 345 A Podręcznik programisty .......................................................................................347 Lokalizacja...................................................................................................................................................350 Plik nagłówkowy locale ...................................................................................................................350 Funkcje globalne ..................................................................................................................................352 codecvt internT, externT, stateT ........................................................................................................354 codecvt_base.........................................................................................................................................359 codecvt_byname internT, externT, stateT .........................................................................................360 collate charT ......................................................................................................................................362 8 SPIS TREŚCI collate_byname charT .......................................................................................................................364 ctype charT ........................................................................................................................................366 ctype char ..........................................................................................................................................370 ctype_base ............................................................................................................................................373 ctype_byname charT .........................................................................................................................374 locale ....................................................................................................................................................376 messages charT .................................................................................................................................381 messages_base......................................................................................................................................383 messages_byname charT ...................................................................................................................384 money_base ..........................................................................................................................................386 money_get charT, InputIterator .........................................................................................................387 moneypunct charT, Inter ...................................................................................................................390 moneypunct_byname charT, Inter .....................................................................................................394 money_put charT, OutputIterator ......................................................................................................396 num_get charT, InputIterator ............................................................................................................398 numpunct charT ................................................................................................................................403 numpunct_byname charT ..................................................................................................................406 num_put charT, OutputIterator ..........................................................................................................408 time_base..............................................................................................................................................412 time_get charT, InputIterator ............................................................................................................413 time_get_byname charT, InputIterator ..............................................................................................417 time_put charT, OutputIterator ..........................................................................................................418 time_put_byname charT, OutputIterator ...........................................................................................421 tm..........................................................................................................................................................423 Cechy znakowe ............................................................................................................................................425 Plik nagłówkowy string ....................................................................................................................425 char_traits charT ...............................................................................................................................427 char_traits char ..................................................................................................................................428 char_traits wchar_t ............................................................................................................................431 IOStreams ....................................................................................................................................................434 Plik nagłówkowy iosfwd ..................................................................................................................434 Plik nagłówkowy iostream ...............................................................................................................437 Plik nagłówkowy ios ........................................................................................................................438 Plik nagłówkowy streambuf .............................................................................................................440 Plik nagłówkowy istream .................................................................................................................441 Plik nagłówkowy ostream ................................................................................................................442 Plik nagłówkowy iomanip ................................................................................................................443 Plik nagłówkowy sstream .................................................................................................................444 Plik nagłówkowy fstream .................................................................................................................445 Globalne definicje typów......................................................................................................................446 Obiekty globalne ..................................................................................................................................447 basic_filebuf charT, traits ..................................................................................................................449 basic_fstream charT, traits ................................................................................................................453 basic_ifstream charT, traits ...............................................................................................................455 basic_ios charT, traits ........................................................................................................................457 basic_iostream charT, traits ...............................................................................................................461 basic_istream charT, traits .................................................................................................................462 basic_istringstream charT, traits, Allocator .......................................................................................471 basic_ostream charT, traits ................................................................................................................473 basic_ostream charT, traits ................................................................................................................475 basic_ostringstream charT, traits, Allocator ......................................................................................483 basic_streamgbuf charT, traits ..........................................................................................................485 basic_stringbuf charT, traits, Allocator .............................................................................................492 basic_stringstream charT, traits, Allocator ........................................................................................495 fpos stateT .........................................................................................................................................497 SPIS TREŚCI 9 ios_base ................................................................................................................................................498 Manipulatory ........................................................................................................................................508 Iteratory strumieni........................................................................................................................................509 Plik nagłówkowy iterator .................................................................................................................509 istreambuf_iterator charT, traits ........................................................................................................511 istream_iterator T, charT, traits, Distance .........................................................................................515 iterator Category, T, Distance, Pointer, Reference ............................................................................518 Znaczniki kategorii iteratorów..............................................................................................................519 ostreambuf_iterator charT, traits .......................................................................................................520 ostream_iterator T, charT, traits, Distance ........................................................................................522 Inne operacje wejścia-wyjścia......................................................................................................................524 bitset N ..............................................................................................................................................524 complex T .........................................................................................................................................525 basic_string charT, traits, Allocator ..................................................................................................526 B Analiza leksykalna i wyodrębnianie wartości liczbowych i logicznych .............529 B.1. Analiza leksykalna wartości liczbowych..............................................................................................530 B.2. Analiza leksykalna wartości logicznych...............................................................................................531 B.3. Specyfikatory konwersji i modyfikatory długości ................................................................................532 C Formatowanie wartości liczbowych i logicznych................................................535 C.1. Formatowanie wartości liczbowych .....................................................................................................535 C.2. Formatowanie wartości logicznych ......................................................................................................538 C.3. Specyfikatory formatowania, kwalifikatory i modyfikatory długości ..................................................538 D Specyfikatory formatu funkcji strftime().............................................................541 E Podobieństwa elementów biblioteki IOStreams do biblioteki języka C..............543 E.1. Tryby otwierania plików.......................................................................................................................543 E.2. Pozycjonowanie w strumieniu ..............................................................................................................544 F IOStreams — różnice pomiędzy implementacją klasyczną a standardową.........545 F.1. Parametryzacja klas IOStreams.............................................................................................................546 F.2. Podział klasy bazowej ios .....................................................................................................................547 F.3. Sygnalizowanie błędów ........................................................................................................................548 F.4. Umiędzynarodowienie biblioteki IOStreams ........................................................................................549 F.5. Brak klas _withassign ...........................................................................................................................549 F.6. Brak deskryptorów plików....................................................................................................................550 F.7. Strumienie ciągów znaków — stringstream zamiast strstream.................................................................551 F.8. Zmiany w klasach buforów strumieni...................................................................................................551 F.9. Zmiany pomniejsze...............................................................................................................................554 10 SPIS TREŚCI G Powiązania mechanizmów lokalizacji w C i C++ ...............................................555 G.1. Kategorie lokalizacji w C i C++...........................................................................................................555 G.2. Globalne obiekty lokalizacji w C i C++ ...............................................................................................555 H Nowe elementy i idiomy języka C++ ..................................................................559 H.1. Typy masek bitowych ..........................................................................................................................559 H.2. POD......................................................................................................................................................560 H.3. Konstruktory jawne..............................................................................................................................560 H.4. Specjalizacje szablonu..........................................................................................................................562 H.5. Domyślne argumenty szablonów..........................................................................................................568 H.6. Jawna specyfikacja argumentu szablonu..............................................................................................571 H.7. Słowo typename ...................................................................................................................................572 H.8. Rzutowanie dynamiczne.......................................................................................................................575 H.9. Funkcyjne bloki try ..............................................................................................................................579 H.10. Wyjątki standardowe............................................................................................................................582 H.11. Ograniczenia zakresów liczbowych .....................................................................................................583 H.12. Ciągi języka C++ .................................................................................................................................583 Bibliografia ..........................................................................................................585 Skorowidz ...........................................................................................................587 4 Wprowadzenie do internacjonalizacji i lokalizacji Współczesne oprogramowanie, jeśli ma się dobrze sprzedawać, powinno być tak użyteczne, jak i atrakcyjne dla użytkowników na całym świecie. Oczywiście użytkownicy komputerów w po- szczególnych krajach z pewnością chcieliby, aby program komunikował się z nimi w ich ojczy- stym języku i zgodnie z przyjętymi lokalnie konwencjami kulturowymi. Programista produktu przeznaczonego na zróżnicowane pod tym kątem rynki musi wbudować w swoje dzieło możliwość adaptacji do owych konwencji. Niniejszy rozdział stanowić będzie wprowadzenie do internacjonalizacji przeznaczone dla tych Czytelników, którzy chcieliby umiędzynarodowić swoje programy pisane w języku C++, ale nie zetknęli się jeszcze z zagadnieniem internacjonalizacji jako takim. Rozdział ten jest więc świetnym źródłem podstawowych informacji o rzeczonym problemie. Na początek winniśmy Czytelnikowi wyjaśnienie pojęć internacjonalizacja i lokalizacja, ich wzajemnych koligacji i różnic pomiędzy nimi. Następnie wskażemy na różnice kulturowe. Różni- ce te decydują o złożoności problemu internacjonalizacji aplikacji. Do różnic kulturowych zaliczy- libyśmy (między innymi) przyjęty lokalnie sposób zapisu liczb, symboli walut, wartości pienięż- nych, czasu i daty, kolejności słów, kodowania znaków. Wszystkie te konwencje postaramy się zaprezentować na przykładach. Poświęcimy też spory podrozdział kodowaniu znaków, ponieważ zagadnienie to ma dla programistów szczególne znaczenie. Różnice w sposobie kodowania zna- ków będą dla nas tym ważniejsze, że wpływają na sposób realizacji operacji wejścia-wyjścia bi- blioteki IOStreams. 4.1. Internacjonalizacja a lokalizacja Dwoma najczęściej wykorzystywanymi w programowaniu aplikacji dla międzynarodowych ryn- ków zbytu terminami są internacjonalizacja i lokalizacja. Czasami oba pojęcia są podciągane pod pojęcie internacjonalizacji1, jednak, aby rozróżnić niuanse znaczeniowe, powinniśmy na potrzeby dalszego omówienia sprecyzować i rozdzielić internacjonalizację od lokalizacji2. 1 Słowo internacjonalizacja doczekało się w języku angielskim zabawnego akronimu w postaci I18N. Zo- stał on utworzony z pierwszej (I) i ostatniej (N) litery słowa internationalization oraz liczby liter pomiędzy literami skrajnymi (18). 2 Zaprezentowane dalej rozróżnienie nie jest naszym wynalazkiem — lokalizacja i internacjonalizacja to popularne terminy, posiadające w dziedzinie inżynierii oprogramowania dobrze zdefiniowane znaczenie. 254 4. WPROWADZENIE DO INTERNACJONALIZACJI I LOKALIZACJI Internacjonalizacja. Internacjonalizacja (umiędzynarodawianie) to wysiłek związany z wbu- dowaniem do oprogramowania potencjału globalnej użyteczności. Wymaga ona wprowadzenia do oprogramowania środków adaptacji do lokalnych konwencji kulturowych. Projektanci i programi- ści oprogramowania umiędzynarodowionego muszą uwzględnić możliwość tej adaptacji już na etapie projektu. Unikają więc „sztywnego” kodowania elementów, które wymagałyby potencjalnie lokalizacji. Na przykład umiędzynarodowione oprogramowanie nigdy nie zawiera tekstów komu- nikatów w kodzie źródłowym — wszelkie napisy wykorzystywane w komunikacji z użytkowni- kiem są przechowywane poza właściwym programem, na przykład w katalogu komunikatów. Taki rozdział kodu źródłowego od napisów wyświetlanych w czasie działania programu umożliwia podmianę owego tekstu na różne jego wersje językowe bez konieczności modyfikowania samego programu. Ponadto programiści nie powinni nigdy czynić założeń co do konwencji formatowania wartości liczbowych czy pieniężnych bądź sposobów wyświetlania dat i czasu. Reguły formato- wania (i analizy leksykalnej) takich elementów powinny być wyodrębnione poza właściwy kod programu, tak aby były od niego maksymalnie niezależne. Lokalizacja. Lokalizacja to proces przystosowywania oprogramowania do danego obszaru geograficzno-kulturowego. Obejmuje tłumaczenie tekstów przechowywanych w katalogu komu- nikatów i tworzenie tabel opisujących przyjęte lokalnie konwencje kulturowe. Lokalizacja jest za- zwyczaj zadaniem osób przygotowujących dany produkt programowy do dystrybucji na danym rynku regionalnym. Rzeczone katalogi komunikatów i tabele powinny być następnie udostępnione użytkownikom oprogramowania umiędzynarodowionego. Udostępnianie to leży zwykle w gestii administratorów systemów komputerowych, którzy do lokalizacji wykorzystują cechy i funkcje systemu operacyjnego. Użytkownicy umiędzynarodowionego oprogramowania powinni móc wy- brać preferowany język komunikacji z programem i preferowane konwencje lokalne albo przed uruchomieniem aplikacji, albo już w trakcie jej używania. Podsumowując, internacjonalizacja to proces polegający na udostępnieniu w oprogramowaniu środków i mechanizmów umożliwiających ewentualną adaptację tego oprogramowania do od- miennych obszarów kulturowo-geograficznych. W niniejszej książce skupimy się właśnie na in- ternacjonalizacji, ignorując kwestie samej lokalizacji jako wtórne. Umiędzynarodawianie oprogramowania można realizować na wiele sposobów. W językach C i C++ dostępne są standaryzowane komponenty internacjonalizacji wchodzące w skład bibliotek standardowych tych języków i towarzyszące każdemu systemowi wykonawczemu. Omówimy te z owych komponentów, które są dostępne w bibliotece standardowej języka C++, a które noszą miana lokalizacji i aspektów. Zanim jednak zagłębimy się w detalach owych komponentów, po- winniśmy najpierw zyskać pogląd na istotę i zakres różnić kulturowych, na które wciąż się powo- łujemy. Kolejne ilustrujące je przykłady nie będą wyczerpywać tematu — przy umiędzynaroda- wianiu oprogramowania należy wziąć pod uwagę również wiele nieporuszanych w nich kwestii, jak choćby orientację tekstu, rozmiary i pozycjonowanie tekstu na ekranie, wyświetlanie pionowe, wybór tabel czcionek, obsługę międzynarodowych klawiatur i wiele innych. Poniżej ograniczamy się do tych zagadnień, które znalazły swoje odzwierciedlenie w komponentach biblioteki standar- dowej języka C++. 4.2. Konwencje kulturowe Ludzie żyjący w różnych regionach świata porozumiewają się w różnych językach i pozostają pod wpływem różnych konwencji kulturowych, na przykład inaczej zapisują liczby czy daty, jak rów- nież przyjmują odmienne porządki alfabetyczne. Wszystkie te czynniki wpływają na kształt umię- dzynarodowionego oprogramowania. 4.2. KONWENCJE KULTUROWE 255 4.2.1. Język Różne grupy etniczne posługują się różnymi językami, a oczywiście język jest najbardziej podstawo- wym wyróżnikiem kultur. Nawet w granicach administracyjnych jednego kraju mogą obowiązywać różne języki. Dotyczy to choćby Szwajcarów, którzy posługują niemieckim, francuskim i włoskim. Języki różnią się wykorzystywanymi alfabetami. Oto kilka przykładów różnych języków i odpowiadających im alfabetów: Amerykański angielski: znaki a do z, A do Z i znaki przestankowe. Niemiecki: znaki a do z, A do Z, znaki przestankowe oraz znaki diakrytyczne (äöü ÄÖÜ ß). znaki α do ω, Α do Ω i znaki przestankowe. znaki alfabetu języka amerykańskiego angielskiego oraz dziesięć tysięcy znaków alfabetów Kanji, Hiragana i Katakana. Grecki: Japoński: 4.2.2. Wartości liczbowe Również reprezentacja liczb podlega konwencjom kulturowym. Na przykład symbol wykorzysty- wany do oddzielania części całkowitej od części ułamkowej liczby, zwany znakiem przecinka dziesiętnego3, może w różnych krajach i językach wyglądać inaczej. W języku angielskim zna- kiem tym jest kropka; w większości pozostałych języków europejskich (w tym w niemieckim4) w tej samej roli występuje przecinek. Analogiczne różnice pojawiają się w obrębie symbolu od- dzielającego grupy cyfr w liczbach ponadtrzycyfrowych — symbol ów, znany jako separator ty- sięczny, w języku angielskim ma postać przecinka, a w większości języków europejskich — kropki5. Różni się nawet sposób grupowania cyfr w liczbach wielocyfrowych. W języku amerykań- skim angielskim cyfry są grupowane trójkami, ale na przykład w Nepalu przyjęło się, że pierwsza grupa cyfr to grupa trójkowa, lecz wszystkie kolejne zawierają już tylko po dwie cyfry: Stany Zjednoczone: Francja: Polska: Nepal: 10,000,000.00 10.000.000,00 10 000 000,00 1,00,00,000.00 4.2.3. Wartości pieniężne W różnych regionach rozmaicie prezentują się wartości pieniężne i symbole walut. Symbol waluty może różnić się położeniem względem wartości pieniężnej. Różne są też formaty zapisu ujemnych wartości pieniężnych. 3 W języku amerykańskim angielskim symbol ten (z angielska radix character) — ponieważ jest reprezen- towany kropką — zwany jest również znakiem kropki dziesiętnej. W języku polskim z analogicznych powo- dów nazywamy go przecinkiem dziesiętnym — przyp. tłum. 4 Oraz polskim — przyp. tłum. 5 W języku polskim w tej roli występuje spacja — przyp. tłum. 256 4. WPROWADZENIE DO INTERNACJONALIZACJI I LOKALIZACJI Tę samą ilość gotówki w walucie amerykańskiej można wyrazić następująco: wewnętrznie: międzynarodowo: USD 99.99 $ 99.99 Kolejny przykład pokaże, że w wartościach pieniężnych różnie umiejscowiony jest symbol waluty: Niemcy (przed wprowadzeniem wspólnej waluty europejskiej): Japonia: Wielka Brytania (przed wprowadzeniem miar dziesiętnych): 49,99 DM ¥ 100 £13 18s. 5d. A oto, jak mogą się różnić reprezentacje wartości ujemnych: Hong Kong: Niemcy: Austria: Szwajcaria: (HK$0.95) –0,95 DM –ÖS 0,95 SFr. –0.95 HK$0.95 0,95 DM ÖS 0,95 SFr. 0.95 4.2.4. Godziny i daty Jak można się spodziewać, od konwencji kulturowych zależny jest również sposób zapisywania godzin i dat. Jedną (ale nie jedyną) z różnic stanowią skróty nazw dni tygodni i miesięcy. Ponadto w niektórych krajach stosuje się format 24-godzinny, w innych zaś 12-godzinny. Różnią się nawet kalendarze — bazują one na zdarzeniach historycznych, astronomicznych i na porach roku. Ofi- cjalny kalendarz japoński jest na przykład oparty na wydarzeniach historycznych, z których naj- ważniejszym jest początek panowania aktualnego cesarza. W wielu krajach, szczególnie w świecie zachodnim, wykorzystywany jest kalendarz gregoriański. Poniżej prezentowanych jest kilka przykładów reprezentacji tej samej daty w kilku różnych krajach. Reprezentacje te różnią się kolejnością występowania dni, miesięcy i lat, znakami separa- torów pomiędzy tymi elementami oraz zastosowaniem możliwości pominięcia elementów takich jak nazwa dnia tygodnia (jak w wydłużonym zapisie daty w języku węgierskim): Stany Zjednoczone Ameryki: Niemcy: Włochy: Grecja: Węgry: Zapis skrócony Zapis wydłużony 10/14/97 14.10.97 14/10/97 14/10/1997 1997.10.14 Tuesday, October 14, 1997 Dienstag, 14. Oktober 1997 martedi 14 ottobre 1997 Τρίτ, 14 ηΟκτωβρίου 1997 1997. október 14. Ta sama godzina może w różnych językach być zapisywana zupełnie inaczej. Oto przykład zapisu tej samej godziny w formacie 24- i 12-godzinnym: Niemcy: Stany Zjednoczone Ameryki: 17:55 Uhr 5:55 PM 4.2. KONWENCJE KULTUROWE 257 4.2.5. Porządek alfabetyczny W różnych językach mamy do czynienia z różnymi regułami porządkowania alfabetycznego słów. Reguły te określane są mianem porządku leksykograficznego (ang. collating sequence). Wyznacza kolejność poszczególnych znaków i inne reguły porządkowania. W niektórych językach na przy- kład pewne grupy znaków są przy porządkowaniu traktowane jak jeden znak. W innych językach zdarza się z kolei, że jeden znak traktowany jest jak dwa kolejne znaki. W programowaniu kolejność znaków jest często wyznaczana wartością liczbową bajta (bajtów) reprezentującego znak. Zilustrowaliśmy to w poniższym przykładzie w kolumnie ASCII. Tego ro- dzaju porządkowanie nie spełnia jednak wymagań żadnego z języków naturalnych. Oto przykład różnic pomiędzy porządkiem ASCII a porządkiem leksykograficznym języka angielskiego: Angielski alien American zebra Zulu ASCII American Zulu alien zebra W kodzie ASCII wartości liczbowe znaków liter wielkich są mniejsze od wartości liczbo- wych liter małych, przez co wszystkie słowa zawierające wielkie litery lądują na początku listy posortowanej według wartości kodów ASCII. Oto przykład podobnych różnic w porządkowaniu dwuznaków: Hiszpański ASCII año cuchillo chaleco dónde lunes llava maíz año chaleco cuchillo dónde llava lunes maíz Słowo chuchillo jest porządkowane przed słowem chaleco, ponieważ w języku hiszpańskim ch to dwuznak, co oznacza, że powinien być traktowany jako pojedynczy znak i porządkowany pomiędzy znakiem c a znakiem d. Zasadniczo dwuznaki są kombinacjami znaków zapisywanych oddzielnie, ale tworzących spójną jednostkę leksykalną. Innym przykładem dwuznaku w wymie- nionych wyrazach jest dwuznak ll, porządkowany po l, ale przed m. Oto kolejny przykład, tym razem dotyczący języka niemieckiego: Niemiecki Musselin Muße Muster ASCII Musselin Muster Muße 258 4. WPROWADZENIE DO INTERNACJONALIZACJI I LOKALIZACJI Znak ß z niemieckiego alfabetu jest traktowany jak dwa znaki — ss. Z tego powodu w języku niemieckim jest porządkowany za ss i przed st. 4.2.6. Komunikaty Program zawiera zazwyczaj wiele elementów tekstowych, które są w różnych momentach wyko- nania programu prezentowane użytkownikowi. Przykładami są choćby komunikaty o błędach, etykiety elementów interfejsu graficznego aplikacji czy napisy umieszczone w nagłówkach i stop- kach drukowanych z poziomu aplikacji stron. Program umiędzynarodowiony nie powinien defi- niować żadnego z takich napisów w kodzie źródłowym programu. Wyodrębnienie tekstu komuni- katów od kodu programu jest uzasadnione zależnością tych pierwszych od języka — jeśli program ma znaleźć nabywców na rynku globalnym, trzeba przetłumaczyć napisy na poszczególne języki narodowe. Istnieje znana i uznana technika izolacji zależnego od języka interfejsu tekstowego od kodu źródłowego aplikacji — zakłada ona wykorzystanie katalogu komunikatów. Taki katalog może być plikiem albo bazą danych, którą można modyfikować niezależnie od kodu programu. Sam program zaś, zamiast definiować ciągi w kodzie źródłowym, może odwoływać się do katalogu i z niego po- bierać komunikaty prezentowane użytkownikom. 4.2.7. Kodowanie znaków Znaki grają pierwszorzędną rolę w przetwarzaniu tekstów. Wyjaśnijmy sobie zatem, czym jest znak i jakie znaczenie mają pojęcia zestawu znaków, kodowania znaków, znaku wielobajtowego i poszerzonego; przy okazji zastanowimy się nad sposobem obsługi znaków w programowaniu6. 4.2.7.1. Pojęcia i definicje Znak. Stanowi on w programowaniu pewną abstrakcję. Naturalne pojmowanie znaku identyfikuje go jako dający się zapisać symbol — ludzie przywykli do kojarzenia znaków ze znanymi im sym- bolami. Tak zdefiniowany znak dysponuje pewną reprezentacją graficzną i może pojawić się na ekranie albo zostać wydrukowany przez drukarkę. Należy przy tym pamiętać, że jeden i ten sam znak może mieć tutaj więcej niż jedną reprezentację graficzną. Trójkę znaków ABC możemy przecież zapisać jako ABC, ABC czy ABC. Mówimy wtedy o czcionce znaku. Doszliśmy więc do tego, że jednym z aspektów znaku jest jego reprezentacja graficzna. Jednakże na potrzeby prze- twarzania tekstu w procesie tworzenia oprogramowania znak musi również posiadać reprezentację w postaci ciągu bitów. Ciąg ten nazywamy kodem znaku. Kod znaku. Jest to sekwencja bitów reprezentująca dany znak. Kod taki może mieć wiele re- prezentacji. Znak litery „a” może na przykład być reprezentowany jako 0×61 (w kodzie ASCII7) czy 0×81 (w kodzie EBCDIC8) czy wreszcie jako 0×0061 (w standardzie Unicode9). Jak widać, 6 Obsługę kodowania znaków w bibliotece IOStreams omawia podrozdział 2.3, „Typy i cechy znakowe”. 7 ASCII to skrót od American Standard Code for Information Exchange (amerykański standard kodowania w wymianie informacji). Definiuje on zestaw siedmiobitowych kodów będący amerykańskim wariantem wy- korzystywanego międzynarodowo zestawu IOS646. 8 EBCDIC to skrót od Extended Binary Coded Decimal Interchange Code. Jest to kod 8-bitowy zdefinio- wany przez IBM. 4.2. KONWENCJE KULTUROWE 259 różnice w poszczególnych kodach dotyczą nie tylko liczby bitów kodujących znak, ale i ich wzor- ca bitowego; wzorzec bitowy reprezentujący literę „a” ma w standardach EBCDIC i ASCII roz- miar 8 bitów, a w Unicode — 17 bitów. Zestaw znaków. To odwzorowanie jeden do jednego pomiędzy znakami a kodami znaków. Fragment zestawu znaków ASCII prezentowany jest w tabeli 4.1. TABELA 4.1. Fragment zestawu ASCII Znak Kod znaku (wyrażony szesnastkowo) … … ? @ A B C D E 0×3F 0×40 0×41 0×42 0×43 0×44 0×45 F … 0×46 … Zwykle wszystkie kody znaków w danym zestawie mają równą liczbę bitów. Przykładami ze- stawów znaków są: • tradycyjny 7-bitowy zestaw ASCII, w którym każdy ze znaków alfabetu języka amerykań- skiego angielskiego jest kodowany na siedmiu bitach, • IOS 8859-1, zestaw przyjęty dla krajów Europy Zachodniej, w którym każdy znak kodowany jest jednym bajtem, • Unicode, w którym każdy ze znaków zajmuje dwa bajty. Więcej informacji o zestawach znaków można znaleźć w podpunkcie 4.2.7.2, „Zestawy znaków”. Metoda kodowania znaków. Jest to zestaw reguł wyznaczających sposób translacji sekwen- cji bajtowej do sekwencji znaków. Zdefiniowane z góry metody kodowania są niezbędne w przy- padkach, kiedy do kodowania danego zbioru znaków wykorzystuje się różne zestawy znaków. Na przykład w alfabecie japońskim wyróżnia się cztery różne zbiory znaków. Znaki te są reprezento- wane szeregiem różnych zestawów znaków. Niektóre z nich zawierają kody jednobajtowe, inne zaś dwubajtowe. Jest rzeczą oczywistą, że w przypadku tak zróżnicowanego zbioru zestawów znaków mieszającego reprezentację jedno- i dwubajtową należy ustalić reguły analizy leksykalnej ciągu bajtów, jeśli ma on zawierać znaki alfabetu japońskiego. W takim układzie interpretacja wartości bieżącego bajta zależna jest bowiem od kontekstu jego wystąpienia. Pojedynczy bajt mo- że równie dobrze reprezentować pojedynczy znak, jak i pierwszy (albo drugi) z bajtów znaku dwubajtowego. Reguły rozstrzygające pomiędzy tymi przypadkami noszą nazwę metody kodowa- nia znaków, w skrócie kodowania. Kodowanie znaków omówimy szczegółowo w podpunkcie 4.2.7.3, „Metody kodowania znaków”. 4.2.7.2. Zestawy znaków Zestawy znaków mogą być klasyfikowane według liczby bitów reprezentujących pojedynczy znak. 7-bitowy zestaw ASCII jest zestawem znaków tradycyjnie już wykorzystywanym do kodo- wania znaków alfabetu języka angielskiego. 7-bitowa precyzja pozwala na zakodowanie 127 zna- ków, co wystarcza do jednoznacznej reprezentacji wszystkich znaków języka angielskiego wraz z szeregiem znaków pomocniczych i sterujących. 9 Unicode to standard kodowania zakładający stałą, 16-bitową szerokość reprezentacji znaku, opracowany i promowany przez konsorcjum Unicode Consortium, niekomercyjną organizację zrzeszającą przedstawicieli przemysłu komputerowego. 260 4. WPROWADZENIE DO INTERNACJONALIZACJI I LOKALIZACJI Do przetwarz
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

C++. Biblioteka IOStreams i lokalizacja programów
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: