ďťż

Blog literacki, portal erotyczny - seks i humor nie z tej ziemi



LEKCJA 1. Co o C i C++ każdy wiedzieć powinien.

________________________________________________________________

W trakcie tej lekcji dowiesz się, dlaczego pora na C++.
________________________________________________________________


Język C++ jest uniwersalnym, nowoczesnym językiem programowania.
Stosowane przez USA i inne kraje wobec Polski wieloletnie
embargo COCOM'u (przeszkody w dostępie do nowoczesnej
technologii) sprawiły m. in., że popularność OS2, UNIXa i C/C++
jest w Polsce do dziś nieproporcjonalnie mała, a Basica, Pascala
i DOSa nieproporcjonalnie duża. W USA C++ już od kilku lat
stanowi podstawowe narzędzie programistów.

Już słyszę oburzenie (A co mnie obchodzi historia
"komputerologii" i koligacyjki!). Otóż obchodzi, bo wynikają z
niej pewne "grzechy pierworodne" języka C/C++, a dla Ciebie,
szanowny Czytelniku - pewne wnioski praktyczne.

Grzech Pierwszy:
* Kompilator języka C/C++ jest standardowym wyposażeniem systemu
operacyjnego UNIX.

Skutki praktyczne:

Każdy PC jest w momencie zakupu (co często wchodzi w cenę zakupu
komputera) wyposażany w system operacyjny DOS - np. DR DOS, PC
DOS, PTS DOS lub MS DOS. Standardowo w zestaw systemu MS DOS
wchodzi interpreter języka BASIC (w MS-DOS - QBasic.EXE). Możesz
więc być pewien, że jeśli jest DOS, to musi być i BASIC.
Podobnie rzecz ma się z C/C++. Jeśli jest na komputerze system
UNIX (za wyjątkiem najuboższych wersji systemu XENIX), masz tam
do dyspozycji kompilator C/C++, za to BASICA ani Pascala prawie
na pewno tam nie ma. Podobnie coraz popularniejszy OS/2
wyposażony jest w kompilator (całkiem niezły) C++ i dodatkowo
jeszcze w pewne gotowe-firmowe biblioteki.

Grzech drugi:
* Język C/C++ powstał jeszcze zanim wymyślono PC, DOS, GUI
(Graficzny Interfejs Użytkownika), Windows i inne tym podobne.

Dwa najważniejsze skutki praktyczne:

I. W założeniach twórców język C++ miał być szybki (i jest) i
zajmować mało miejsca w pamięci (bo ówczesne komputery miały jej
bardzo mało!). Zawiera więc różne, niezrozumiałe dla nas z
dzisiejszego punktu widzenia skróty. Np. to co w Pascalu czy
Basicu wygląda zrozumiale:

i:=i+1; (Pascal)
10 I=I+1 lub inaczej NEXT I (Basic)

to w języku C++ wygląda dziwacznie:

i++; albo jeszcze dziwniej ++i;

Tym niemniej zwróć uwagę, że w Pascalu zajmuje to 7 znaków, w
Basicu - 8 znaków (spacja to też znak!), a w C++ tylko 4.

Inny przykład:

X=X+5 (Basic, 5 znaków),
X:=X+5 (Pascal, 6 znaków),
X+=5 (C++, tylko 4 znaki).

Z takiej właśnie filozofii wynika i sama nazwa - najkrótsza z
możliwych. Jeśli bowiem i++ miało znaczyć mniej więcej tyle samo
co NEXT I (następne I) to C++ znaczy mniej więcej tyle samo co
"NASTĘPNA WERSJA C".

II. Nie ma nic za darmo. W języku C/C++, podobnie jak w
samochodzie wyścigowym formuły I, za szybkość i skuteczność
płaci się komfortem. Konstrukcje stosowane w języku C/C++ są
maksymalnie dostosowane do "wygody" komputera. Pozwala to na
uzyskiwanie ˙niezwykle szybkich "maszynowo-zorientowanych" kodów
wykonywalnych programu, ale od programisty wymaga
przyzwyczajenia się do "komputerowo-zorientowanego sposobu
myślenia".

Grzech Trzeci (i chyba najcięższy):
* Jest najlepszy. Ostrożniej - jest najchętniej stosowanym
narzędziem profesjonalnych programistów.

Ma oczywiście konkurentów. Visual Basic (do małych aplikacji
okienkowych), Turbo Pascal (do nauki podstaw - elementów
programowania sekwencyjnego, proceduralno-strukturalnego),
QuickBasic (programowanie strukturalne w środowisku DOS),
Fortran 90, ADA, SmallTalk, itp, itd.

Sam wielki Peter Norton przyznaje, że początkowe wersje swojego
słynnego pakietu Norton Utilities pisał w Pascalu, ale dopiero
przesiadka na C/C++ pozwoliła mu doprowadzić NU do dzisiejszej
doskonałości. Jakie są programy Petera Nortona - każdy widzi...

Zapewne masz na swoim komputerze kilka różnych aplikacji (np.
TAG, QR-Tekst, Word, itp.) - jeśli zajrzysz do nich do środka
(View), możesz sam przekonać się, że większość z nich została
napisana właśnie w C++ (Kompilatory C++ pozostawiają w kodzie
wynikowym .EXE swoją wizytówkę zwykle czytelną przy pomocy
przeglądarki; przekonasz się o tym także zaglądając przez [View]
do własnych programów); stosowane narzędzia możesz rozpoznać
także po obecności dynamicznych bibliotek - np. BWCC.DLL -
biblioteka elementów sterujących - klawiszy, itp - Borland
Custom Controls for Windows).

Skutki praktyczne:

Nauczywszy się języka C/C++ możesz nie bać się ani systemu
UNIX/XENIX a ich środowiska okienkowego - X Windows, ani OS2,
ani Windows 95 (dotychczasowe testy starych 16-bitowych
aplikacji wykazały b. wysoki stopień kompatibilności), ani
stacji roboczych, ani dużych komputerów klasy mainframe. Język
C/C++ dosłużył się bowiem ogromnej ilości tzw. implementacji
czyli swoich odmian, przeznaczonych dla różnych komputerów i dla
różnych systemów operacyjnych. Windows NT i Windows 95 również
zostały napisane w C++.
Czytając prasę (np. Computer World, PC-Kurier i in.) zwróć
uwagę, że najwięcej ofert pracy jest właśnie dla programistów
posługujących się C++ (i tak zapewne będzie jeszcze przez kilka
lat, póki nie wymyślą czegoś lepszego - np. jakiegoś C+++).
Z Grzechu Trzeciego (choć nie tylko) wynika także pośrednio
Grzech Czwarty.

Języka C++ Grzech Czwarty - ANSI C, C++, czy Turbo C++, Visual
C++, czyli mała wieża BABEL.

Nie jestem pewien, czy "wieża BABEL" jest określeniem
trafniejszym niż "kamień filozoficzny", bądź "perpetuum mobile".
To co w ciągu ostatnich lat stało się z językiem C++ ma coś
wspólnego z każdym z tych utopijnych symboli. A w dużym
uproszczeniu było to tak.

Podobnie, jak mechanikom od zarania dziejów marzyło się
perpetuum mobile, tak informatykom zawsze marzyło się stworzenie
jednego SUPER-UNIWERSALNEGO języka programowania. Takiego, który
byłby zupełnie niezależny od sprzętu tzn., aby program napisany
w takim języku mógł być przeniesiony BEZ ŻADNYCH ZMIAN na
dowolny komputer I DZIAŁAŁ. Do takiej roli pretendowały kolejno
FORTRAN, Algol a potem przyszła pora na C/C++. Gdyby informatycy
nie okazali się zbyt zachłanni, może coś by z tego wyszło. Ale,
jak to w życiu, programiści (podobnie jak żona rybaka z bajki "O
rybaku i złotej rybce") chcieli wszystkiego naraz:

* żeby program dał się przenieść na komputer innego typu i
działał,
* żeby działał szybko i optymalnie wykorzystywał sprzęt,
* żeby umiał wszystko, co w informatyce tylko wymyślono (tj. i
grafika, i obiekty, i obsługa peryferii i...).

I stało się. W pomyślanym jako uniwersalny języku zaczęły
powstawać odmiany, dialekty, mutacje, wersje itp. itd.

Jeśli C++ nie jest Twoim pierwszym językiem, z pewnością
zauważyłeś Czytelniku, że pomiędzy GW Basic a Quick Basic są
pewne drobne różnice. Podobnie Turbo Pascal 7.0 trochę różni się
od Turbo Pascala 5.0. Mimo to przykład poniżej pewnie Cię trochę
zaskoczy. Dla zilustrowania skali problemu przedstawiam poniżej
dwie wersje TEGO SAMEGO PROGRAMU napisanego w dwu różnych
wersjach TEGO SAMEGO JĘZYKA C++. . Obydwa programy robią
dokładnie to samo. Mają za zadanie wypisać na ekranie napis
"Hello World" (czyli "Cześć świecie!").

Program (1)

main()
{
printf("Hello World\n");
}


Program (2)

#include
#include

LPSTR p = "Hello World\n";

main(void)
{
cout << "Hello World" << endl;
MessageBox(0, p, "Aplikacja dla Windows", MB_OK);
return (0);
}

Cóż za uderzające podobieństwo, prawda? Ale żarty na bok. Jeśli
zaistnieje jakiś problem, zawsze mamy co najmniej trzy wyjścia.
Możemy:

1. Udawać, że go nie ma.
Tak postępuje wielu autorów podręczników na temat C/C++.
2. Krzyczeć, że nam się to nie podoba.
Mamy pełne prawo obrazić się i wrócić do Basica lub Pascala.
3. Spróbować poruszać się w tym gąszczu.

Wyjście trzecie ma jedną wadę - jest najtrudniejsze, ale i
efekty takiego wyboru są najbardziej obiecujące.

Jeśli chcesz zaryzykować i wybrać wyjście trzecie, spróbujmy
zrobić pierwszy krok w tej "dżungli". Wyjaśnijmy kilka nazw,
pojęć i zasad gry obowiązujących w tym obszarze.

Języki programowania posługują się pewnymi specyficznymi grupami
słów i symboli. Są to m. in.:

* słowa kluczowe
(tu pomiędzy wersjami C++ rozbieżności są niewielkie),

* operatory (po prostu znaki operacji - np. +),
(tu zgodność jest niemal 100 %-owa)

* dyrektywy
(polecenia dla kompilatora JAK tworzyć program wynikowy;
tu już jest gorzej, szczególnie dyrektywa #pragma w każdej
wersji kompilatora C++ jest inna)

* nazwy funkcji
(z tym gorzej, bo każdy producent ma własne funkcje i własne
upodobania)

* nazwy stałych
(gdyby chodziło tylko o PI i e - wszystko byłoby proste)

* nazy zasobów (FILE, PRN, CONSOLE, SCREEN itp. itd)
(tu jest lepiej, ale też rozbieżności są zauważalne)

Autor programu może jeszcze nadawać zmiennym (liczbom, zmiennym
napisom, obiektom, itp.) własne nazwy, więc czasem nawet
wytrawny programista ma kłopoty ze zrozumieniem tekstu
żródłowego programu...

W języku C a następnie C++ przyjęto pewne maniery nadawania nazw


- identyfikatorów ułatwiające rozpoznawanie tych grup słów:

* nazwa() - funkcja
* słowa kluczowe i nazwy zmiennych - małymi literami
* STAŁE - nazwy stałych najczęściej dużymi literami
* long/LONG - typy danych podstawowe/predefiniowane dla Windows
_NAZWA - nazwy stałych predefiniowanych przez producenta
__nazwa lub __nazwa__ - identyfikatory charakterystyczne dla
danej wersji kompilatora

itp., których to zwyczajów i ja postaram się przestrzegać w
tekście książki.

Amerykański Instytut Standardów ANSI od lat prowadzi walkę z
wiatrakami. Stoi na straży jednolitego standardu języka, który
nazywa się standardem ANSI C i ANSI C++. Wielcy producenci od
czasu do czasu organizują konferencje i spotkania gdzieś w
ciepłych krajach i uzgadniają niektóre standardy - czyli wspólne
dla nich i zalecane dla innych normy, ale niektórzy bywają
zazdrośni o własne tajemnice i nie publikują wszystkich
informacji o swoich produktach. Dlatego wszelkie "słuszne i
uniwersalne" standardy typu ODBC, Latin 2, Mazovia, LIM, OLE,
DDE, BGI, itp., itd. mają niestety do dziś ograniczony zakres
stosowalności a wszelkie zapewnienia producentów o całkowitej
zgodności ich produktu z... (tu wpisać odpowiednie) należy
niestety nadal traktować z pewną rezerwą.

W niniejszej książce zajmiemy się kompilatorem Borland C++ w
jego wersjach 3.0 do 4.5, jest to bowiem najpopularniejszy w
Polsce kompilator języka C/C++ przeznaczony dla komputerów IBM
PC. Nie bez znaczenia dla tej decyzji był także fakt, że Borland
C++ i Turbo C++ bez konfliktów współpracuje z:

* Turbo Pascal i Borland Pascal;
* Assemblerami: TASM, BASM i MASM;
* Turbo Debuggerem i Turbo Profilerem;
* bibliotekami Turbo Vision, ObjectVision, Object Windows
Library, Database Tools, itp.
* pakietami innych producentów - np. Win/Sys Library, Object
Professional, CA-Visual Objects, Clipper, itp.

i in. produktami "ze stajni" Borlanda popularnymi wśród
programistów. Programy TASM/BASM, Debugger, Profiler a także
niektóre biblioteki (np. Object Windows Library, Turbo Vision
Library, itp. wchodzą w skład pakietów instalacyjnych BORLANDA,
ale UWAGA - niestety nie wszystkich). Borland C++ 4+ pozwala,
dzięki obecności specjalnych klas VBX w bibliotece klas i
obiektów Object Windows Library na wykorzystanie programów i
zasobów tworzonych w środowisku Visual Basic'a. Podobnie
kompilatory C++ firmy Microsoft (szczególnie Visual C++)
bezkonfliktowo współpracują z zasobami innych aplikacji - np.
Access, Excel, itp..

Warto tu zwrócić uwagę na jeszcze jeden czynnik, który może stać
się Twoim, Czytelniku atutem. Jeśli znasz już kompilatory Turbo
Pascal, bądź Borland Pascal, zwróć uwagę, że wiele funkcji
zaimplementowanych w Turbo Pascal 6.0. czy 7.0 ma swoje
odpowiedniki w BORLAND C++ i Turbo C++. Odpowiedniki te zwykle
działają dokładnie tak samo, a różnią się najczęściej
nieznacznie pisownią nazwy funkcji. Wynika to z błogosławieństwa
"lenistwa" (ponoć homo sapiens najwięcej wynalazków popełniał
właśnie ze strachu, bądź z lenistwa...). Firmie Borland "nie
chciało się" wymyślać od nowa tego, co już sprawdziło się
wcześniej i do czego przyzwyczaili się klienci! I odwrotnie.
Poznawszy Borland/Turbo C++ z łatwością zauważysz te same
funkcje w Borland/Turbo Pascalu.

[!!!]UWAGA!
________________________________________________________________

O Kompilatorach BORLAND C++ 4 i 4.5 napiszę nieco póżniej,
ponieważ są bardziej skomplikowane i wymagają trochę większej
znajomości zasad tworzenia i uruchamiania programów (projekty).

To prawda, że zawierają narzędzia klasy CASE do automatycznego
generowania aplikacji i jeszcze kilka innych ułatwień, ale miej
trochę cierpliwości...
________________________________________________________________

[???] C.A.S.E.
________________________________________________________________

CASE - Computer Aided Software Engineering - inżynieria
programowa wspomagana komputerowo. Najnowsze kompilatory C++
wyposażone są w narzędzia nowej generacji. W różnych wersjach
nazywają się one AppExpert, ClassExpert, AppWizard, VBX
Generator, itp. itd, które pozwalają w dużym stopniu
zautomatyzować proces tworzenia aplikacji. Nie można jednak
zaczynać kursu pilotażu od programowania autopilota - a kursu
programowania od automatycznych generatorów aplikacji dla
Windows...
________________________________________________________________


Zaczynamy zatem od rzeczy najprostszych, mając jedynie tę
krzepiącą świadomość, że gdy już przystąpimy do pisania
aplikacji konkurencyjnej wobec Worda, QR-Tekst'a, czy Power
Point'a - może nas wspomagać system wspomaganina CASE dołączony
do najnowszych wersji BORLAND C++ 4 i 4.5. Jeśli mamy już gotowe
aplikacje w Visual Basic'u - Borland C++ 4+ pozwoli nam
skorzystać z elementów tych programów (ale pracować te aplikacje
po przetransponowaniu do C++ będą od kilku do kilkuset razy
szybciej).
_______________________________________________________________
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • qualintaka.pev.pl
  •