Ucz się programowania, nie języków programowania - część 3

W poprzednim odcinku "Ucz się programowania, nie języków programowania" pisałem o zmiennych. Dziś odpowiemy sobie na pytanie: jakie dane mogą przechowywać zmienne. Języki programowania umożliwiają nam operowanie na liczbach, napisach a nawet danych typu "Osoba".
Czytaj inne artykuły z cyklu:
Dla procesora sprawa zmiennych jest dość prosta.

Przykładowo jednostki z rodziny x86 mają rozkazy pozwalające na zapisanie danych do jednego z rejestrów (jak, już pisaliśmy: wewnętrznych komórek pamięci) mogących przechowywać 32 bity informacji (a więc zbioru 32 komórek mogących przechowywać "0" lub "1").

W tym, najpopularniejszym obecnie typie procesora dla komputerów biurkowych obok rozkazów zapisu do 32-bitowego rejestru występują polecenia pozwalające na umieszczenie danych w jego 16-bitowej części lub 8-bitowej części tej części. W procesorach 64-bitowych typu x86_64 każdy z 32-bitowych rejestrów jest połową większego, 64-bitowego. Sumując: procesor x86 zna trzy "typy zmiennych" a x86_64 - cztery. Danymi, które można w nich zapisać są oczywiście liczby.

Jednak nawet programiści piszący w assemblerze, czyli języku, w którym jedno polecenie przekłada się na jeden rozkaz procesora, cenią sobie fakt, że napisy wyglądają w kodzie źródłowym "normalnie". Także dla największych geeków "Hello world" prezentuje się bardziej przyjaźnie niż zapisane w systemie szesnastkowym kody ASCII - w tej postaci "Hello world" to 48656C6C6F20776F726C64.

Podejrzane typy

Programiści mówią, iż "assembler jest językiem dynamicznym o słabej kontroli typów". "Dynamiczny" brzmi zachęcająco, lecz co oznacza dla ludzi piszących aplikacje? "Dynamiczność" bądź "statyczność" języka to stosunek kompilatora do zmiennych i ich typów. Język jest dynamiczny jeżeli ta sama zmienna może w ciągu działania programu wskazywać na wartości różnych typów - np. najpierw na liczbę a później na napis. "Język procesora" - assembler jest dynamiczny, gdyż dynamiczna jest pamięć komputera. Możemy zapisać stan konta, a następnie adres cioci w tych samych komórkach.

W przeciwieństwie do kwestii "dynamiczności" i "statyczności" sprawa ścisłej lub słabej kontroli typów nie jest kwestią prostą. Słaba kontrola typów występuje, gdy za pomocą prostej operacji możemy np. skonwertować liczbę na napis, bądź też wartość liczbową do napisu dołączyć.

Jak pisze Bruce A. Tate w książce "Więcej niż Java": "Język o ścisłej kontroli typów wymusza stosowanie w każdej operacji typów, które są ze sobą zgodne".

Trudno jednak poradzić sobie bez np. przekształcania liczby w napis, więc wskazanie języka o "w pełni ścisłej" kontroli typów byłoby trudne.

"Siłę" kontroli typów można więc stopniować w zależności od tego, na ile wykonywana operacja wymaga bezpośredniego zaznaczenia przez programistę, że zamienia jeden typ w drugi. Zwłaszcza, że zamiany takie mogą mieć różną postać. Możemy chcieć by przekształcenia liczby 97 w napis.

Operacja taka da nam oczywiście "97", ale jeśli będzie to rzeczywiście "przekształcenie". Jeżeli pomylimy je z "potraktowaniem" tej liczby jako napisu naszym oczom ukaże się litera 'a', gdyż 97 to jej kod w tablicy ASCII, która wykorzystywana jest do tłumaczenia liczb na znaki i vice-versa.

Tak się składa...
Typy w językach programowania to jednak nie tylko znaki i liczby. Jeżeli nasz program ma przechowywać informacje o pracownikach, to czyż nie byłoby świetnie gdyby występował w nim typ danych "pracownik"?
Już prostsze języki takie jak Pascal bez rozszerzeń obiektowych czy C dają taką możliwość. Pozwalają one na definiowanie typów złożonych, o czym pisałem już w poprzednim odcinku.

Podstawowy typ złożony w Pascalu to rekord, w C - struktura. Jeśli nasz nowy typ opisuje pracownika, to może on składać się z napisu "imię", napisu "nazwisko", liczby "płaca" i adresu. Warto, aby adres był także typem złożonym przechowującym napis "miasto", napis "ulica", napis "numer domu" i liczbę "numer lokalu". Numer domu zapiszemy jako napis, gdyż może on zawierać litery, np. 37A. Ostatni aspekt naszej konstrukcji uświadamia, że wybór typów w programowaniu nie jest sprawą trywialną. Warto pamiętać o maksymie Einsteina - "Wszystko powinno być tak proste jak to tylko możliwe, ale nie prostsze".

Obecnie dominującym podejściem jest tzw. programowanie obiektowe, w którym typy związane są z czynnościami - np. czynność "jazda" przypisana jest do typu "pojazd". Ponieważ typy "samochód" i "motocykl" są podtypami typu "pojazd", także im można wydać polecenie "jedź".

Swoistym typem może być też wykonywalna część programu. Wynika to wprost z faktu, że architektura komputerów podążyła w kierunku wybranym przez von Neumanna - ta sama pamięć przechowuje dane i rozkazy.

Warto też zauważyć, że nie każdy proces jest zależny od typu obiektów jakie mu podlegają. Kolejka działa tak samo, niezależnie czy jest kolejką samochodów oczekujących na dojazd do dystrybutora, czy ludzi, którzy stoją przy kasie supermarketu. Ten kto stanął pierwszy, pierwszy opuści kolejkę.

Dlatego powstał zbiór rozwiązań pozwalających na niezależny od typu zapis algorytmu. Nosi on nazwę programowania generycznego. Wnikanie w modele programistyczne byłoby jednak z mojej strony pewnym przeskokiem. Skoki zaś nie są w programowaniu rzeczą zalecaną.

To już ostatni tekst z serii "Ucz się programowania, nie języków programowania". Oczywiście jest to temat rzeka i trudno go wyczerpać w kilku artykułach, mam jednak nadzieję, że udało mi się Was zainteresować.
Tagi: assembler, ucz się programowania, ASCII
Ocena:
Twoja ocena:

Komentarze (10)

~indian

22-11-2010 16:54

~max i MatKus dokładnie i wyczerpująco skomentowali. Dopisuje się tylko aby dowieść, że tematem jest zainteresowanie i można by sie postarać cos takiego rzetelnie napisać. 5 za pomysł, 1 za niestaranność realizacji, 1 za trudny język.

~max

22-11-2010 11:19

"Dlatego powstał zbiór rozwiązań pozwalających na niezależny od typu zapis algorytmu. Nosi on nazwę programowania generycznego. Wnikanie w modele programistyczne byłoby jednak z mojej strony pewnym przeskokiem. Skoki zaś nie są w programowaniu rzeczą zalecaną." Po pierwsze: skaczesz jak pchła z jednego psa na drugiego; po drugie: jak się co 5 minut wraca do asemblera, to nie ma co się na skoki obrażać. Bo inaczej niż skokami niczego w asmie nie załatwisz; po trzecie: takie coś nie powinno się nazywać artykułem. To jest typowy braindump. Żeby nie powiedzieć... samo "dump". To już nawet na bloga za wiele. To jest informacyjny chaos. Czy autor napisał konspekt serii przed pisaniem kolejnych części? Jeśli tak, to konspekt był do bani. Jeśli nie, to niech następnym razem napisze.

q

22-11-2010 09:38

dupny system dodawania komentarzy

nick...

21-11-2010 17:26

Autor tego blogowego wpisu musi się jeszcze wiele nauczyć.

expert

21-11-2010 12:12

kiepsko, kiepsko... naszczęście już koniec tych artykułów

Alutka

20-11-2010 18:02

Gdybyście chcieli porozmawiać o programowaniu, to zapraszam na FIDG do działu \'programowanie\': http://forum.idg.pl/programowanie-f119.html

aa

20-11-2010 16:14

fakt - glupio sie dodaje tu komentarz. poza tym moze znknac po wystapieniu bledu (!) - moze autorowi tego rozwiaznia przydalby sie kurs programowania?

gablot

20-11-2010 12:05

brak mozliwosci wydrukowania artykułu !!!!!!!!!!!!!!!

slepiec

19-11-2010 18:24

walcie sie z tym systemem komentarzy... foch, nie napiszę co chcialem

MatKus

19-11-2010 12:18

Cóż, jeśli mam być szczery, to o ile pomysł tej serii artykułów jest w miarę ciekawy, o tyle wykonanie - niezbyt. IMHO za dużo autor próbował zmieścić w jednym artykule bądź dobierał nieodpowiednie opisy. Mimo, że sam w temacie programowania siedzę od 6 roku życia i myślę, że umiem programować (nie tylko znam języki programowania), to nie zawsze rozumiem, co autor chciał przekazać daną wypowiedzią, a co dopiero ktoś, kto nie ma zielonego pojęcia o programowaniu i chce czegoś się nauczyć.Wszystko to jakoś tak skomplikowanie brzmi, niezrozumiale.

Polecane

PC World z prezentem!

Tak, zamawiam 12 wydań PC World po 14,09 zł każde (zamiast 19,90 zł) od numeru 6/2012.
Dodatkowo program Panda Antyvirus Pro 2012,
chroniący aż 3 komputery, dostanę za darmo.

PC World 6/2012
Nowy numer PC World 6/2011
Razem: 169


  • Z darmową wysyłką
Wyrażam zgodę na wykorzystywanie mojego adresu email do celów marketingowych. rozwiń »

Pobierz bezpłatnego e-booka

20 lat polskiej sieci
Ebook 20 lat polskiej sieci to kompletna charakterystyka polskiego internetu (oraz polskiego internauty). Odpowiadamy na pytanie, jak wygląda nasz kraj na tle bliższych i dalszych europejskich sąsiadów pod względem popularyzacji szerokopasmowych łączy internetowych i rynku mobilnego. Wymieniamy również wady i zalety korzystania z bezpłatnych punktów dostępowych.
Jeśli chcesz otrzymać darmowego e-booka, wpisz swój adres e-mail. Wyślemy Ci go natychmiast!
Wyrażam zgodę na wykorzystywanie mojego adresu email do celów marketingowych. rozwiń »