język obiektowy jest językiem programowania komputerowego, który obraca się wokół pojęcia obiektu. Opracowano języki obiektowe, aby ułatwić tworzenie, debugowanie, ponowne używanie i utrzymywanie oprogramowania niż jest to możliwe w przypadku wcześniejszych języków. Zrozumienie obiektów i języków obiektowych wymaga znajomości ewolucji języków programowania i struktur danych.
Ewolucja języków programowania komputerowego
języki programowania komputerowego ewoluowały nieustannie przez lata. Ewolucja ta jest szczegółowo opisana w poniższych przykładach.
język montażu.
pierwsze programy komputerowe zostały napisane w języku assembly. Jest to prymitywny Typ języka, w którym każde polecenie odpowiada pojedynczej instrukcji maszynowej; jest to najbardziej podstawowa możliwa obsługa komputera. Osiągnięcie czegoś użytecznego wymaga wielu instrukcji maszynowych. Język asemblacji jest specyficzny dla konkretnego typu komputera; przeniesienie programu na inny typ komputera wymaga napisania zupełnie nowego programu. Programy Assembly language są trudne do napisania, debugowania i utrzymania. Chociaż inne języki są obecnie używane w większości aplikacji komputerowych, język assembly jest nadal używany jako pierwszy język, gdy nowy układ jest rozwijany.
języki wysokiego rzędu.
Po języku assembly rozwijano języki wyższego rzędu; wśród wczesnych były języki FORTRAN i BASIC. Jedno stwierdzenie w języku wysokiego rzędu odpowiada zdaniu w języku angielskim. Program o nazwie kompilator odczytuje instrukcje z pliku źródłowego i generuje plik zawierający instrukcje maszynowe, który jest nazywany plikiem obiektowym. Plik obiektowy może być następnie załadowany i wykonany przez komputer. Język wysokiego rzędu jest bardziej przenośny niż program assembly language; ten sam plik źródłowy może być skompilowany dla dowolnego komputera, o ile istnieje odpowiedni kompilator.
wczesne języki wysokiego rzędu zezwalały tylko na proste typy danych, takie jak liczba całkowita, liczba zmiennoprzecinkowa lub łańcuch (ciąg liter). Jedyną dostępną strukturą danych była tablica. Tablica jest listą elementów, które są tego samego typu danych; na przykład lista liczb lub lista łańcuchów. Baza danych została utworzona przy użyciu grupy tablic. Na przykład baza danych produktów może zawierać trzy tablice o nazwie Numer produktu, Opis produktu i cena produktu. Od programisty zależało, aby tablice były wyrównane; na przykład, aby upewnić się, że trzeci element każdej tablicy odpowiada temu samemu produktowi.
języki ustrukturyzowane.
kolejnym krokiem w ewolucji komputerowych języków programowania było opracowanie ustrukturyzowanych języków, takich jak C i PASCAL, oraz wprowadzenie struktur danych. Struktura danych to połączenie prostszych typów danych w jeden rekord. Na przykład baza danych produktów może być skonstruowana jako tablica rekordów produktów, każdy rekord zawierający numer produktu, Opis produktu i pola ceny produktu. Teraz jeden rekord może zawierać wszystkie niezbędne informacje o jednym elemencie. Struktury stały się również bardziej zdefiniowane w proceduralnej części języka. Funkcja lub procedura jest małą częścią większego programu, który może być napisany w celu zapewnienia podstawowej operacji na strukturze danych, takiej jak rekord.
języki obiektowe.
kolejny krok w ewolucji komputerowych języków programowania, orientacja obiektowa, został wprowadzony w języku Smalltalk. Orientacja obiektowa posuwa koncepcje programowania strukturalnego o krok dalej. Teraz, zamiast struktur danych i oddzielnych struktur programu, zarówno dane, jak i elementy programu są łączone w jedną strukturę zwaną obiektem. Obiektowe elementy danych nazywane są atrybutami, podczas gdy obiektowe elementy programu nazywane są metodami. Łącznie atrybuty i metody nazywane są elementami obiektu. Zazwyczaj metody obiektu są jedynymi programami zdolnymi do operowania na atrybutach obiektu.
w przypadku orientacji obiektowej zasadnicza zmiana nastąpiła w sposobie oglądania programów. Wcześniejszy pogląd był taki, że dane muszą być manipulowane w jakiś sposób, aby osiągnąć końcowy wynik, a program był postrzegany jako sekwencyjny sposób wykonywania manipulacji. Z punktu widzenia orientacji obiektowej program jest postrzegany jako grupa obiektów, które reagują na wiadomości od użytkownika, innych programów lub innych obiektów. Pogląd ten doprowadził do powstania idei programowania sterowanego zdarzeniami, tj. gdy dojdzie do zdarzenia a, Obiekt ten wykona akcję B. wiadomość jest wysyłana do obiektu przez wywołanie jednej z jego metod.
cechy programowania obiektowego
Kluczowe cechy programowania obiektowego obejmują hermetyzację i ukrywanie danych, dziedziczenie i polimorfizm.
hermetyzacja i ukrywanie danych.
główną ideą w programowaniu obiektowym (OOP) jest to, że atrybuty obiektu i metody, które działają na atrybutach, są powiązane ze sobą lub zamknięte w obiekcie. Metody obiektu zapewniają jedyne interfejsy pomiędzy obiektem a innymi częściami programu. Różni się to od wcześniejszych języków, w których każda część programu mogła działać na dowolnym fragmencie danych w dowolnym momencie. Chociaż wydaje się to restrykcyjne, ograniczenia powodują, że program jest bardziej modułowy, który jest łatwiejszy do opracowania i mniej podatny na błędy. Oznacza to również, że łatwiej jest przenieść obiekt do innego środowiska i nadal działać poprawnie.
obiekt programowy jest nieco podobny do obiektu fizycznego. Na przykład silnik może być używany do zasilania samochodu. Ma wewnętrzne komponenty, odpowiadające atrybutom, ale nie trzeba się martwić o to, czym są i jak działają. Silnik musi współpracować z przepustnicą, układem paliwowym, przekładnią, kolektorami dolotowymi i wydechowymi, z których wszystkie odpowiadają metodom. Nie można sobie wyobrazić, że paliwo dostałoby się do silnika w jakikolwiek inny sposób niż przez układ paliwowy. Dopóki prawidłowe interfejsy są utrzymywane, silnik będzie działał. Tak jest z przedmiotami. Atrybuty obiektu są ukryte z zewnątrz. Obiekt współdziała ze swoim otoczeniem za pomocą swoich metod.
dziedziczenie.
kolejnym ważnym pojęciem programowania obiektowego jest dziedziczenie. Klasa obiektu jest zdefiniowana w hierarchii i mówi się, że dziedziczy zachowanie swoich przodków (tych obiektów nad nią w hierarchii). Na przykład program do rysowania może zawierać trzy klasy obiektów: Kształt, prostokąt i okrąg. Można je zdefiniować tak, że prostokąt i okrąg są zarówno potomkami kształtu.
kształt zawiera atrybuty wspólne dla każdego kształtu, takie jak położenie kształtu na powierzchni rysunkowej. Shape zapewnia również metody manipulowania tymi atrybutami. Na przykład metoda move zmieniłaby położenie kształtu. Dodatkowo dostarcza definicji metod, na które wszystkie kształty muszą być w stanie odpowiedzieć, na przykład metoda rysowania, aby odtworzyć kształt na powierzchni rysowania. Metoda draw w tym przypadku mówi się, że jest abstrakcyjna; nie robi nic innego niż tworzenie wymogu, że klasy descendent muszą ją zaimplementować.
ponieważ prostokąt jest potomkiem kształtu, dziedziczy atrybuty (położenie) i metody (ruch) z kształtu. Zapewnia dodatkowe atrybuty, których potrzebuje (szerokość i wysokość) oraz nowe metody, które manipulują tymi atrybutami (setWidth, setHeight). Prostokąt musi również zapewniać metodę rysowania, która maluje prostokąt na powierzchni rysowania, ponieważ każdy descendent kształtu musi zaimplementować metodę rysowania. Podobnie, Circle dostarcza nowy atrybut (radius), metody do manipulowania nim (setRadius) i własną metodę rysowania.
przy takim układzie program drawing manager miałby listę kształtów na powierzchni rysowania. Aby przenieść obiekt, wywołałoby to metodę move obiektu. Aby narysować obiekt, menedżer wywołuje metodę rysowania obiektu. Menedżer nie wie, ani nie dba o to, jak Obiekt się porusza lub rysuje, o ile zadanie zostanie wykonane. W rzeczywistości może nawet nie wiedzieć, jaki kształt naprawdę ma dany obiekt. Może to być prostokąt, okrąg lub dowolny inny obiekt wywodzący się z kształtu. Musi tylko wiedzieć, że jest potomkiem kształtu, więc może wysłać do niego dowolną wiadomość, którą kształt może otrzymać.
możliwość dziedziczenia języka obiektowego dodała zupełnie nowy wymiar programowaniu. Nauka wcześniejszego języka wysokiego rzędu była głównie związana z nauką składni języka (sposobu konstruowania wypowiedzi językowych), co nie jest takie trudne. W języku obiektowym nauka składni jest nadal konieczna, ale zapoznanie się ze standardowymi hierarchiami klas—które mogą obejmować tysiące klas, każda klasa ma własne metody-jest znacznie większym zadaniem. Jest to jednak warte zachodu, ponieważ obiekt dziedziczy atrybuty i zachowanie swojego rodzica. Programista może uniknąć niepotrzebnej pracy, znajdując istniejący obiekt, który już wykonuje większość tego, co jest potrzebne. Następnie można stopniowo dodawać nowe możliwości. Rezultatem jest niższy koszt, wyższa jakość oprogramowania.
ta cecha doprowadziła również do włączenia funkcji automatycznej dokumentacji w kilku językach obiektowych. We wcześniejszych językach dokumentacja—jeśli w ogóle została wygenerowana-była wykonywana oddzielnie, niemal jako refleksja. Teraz informacje o dokumentacji mogą być zawarte w obiektowym kodzie źródłowym i wykorzystane do automatycznego wygenerowania dokumentu Hypertext Markup Language (HTML), wraz z hiperłączami w górę iw dół hierarchii klas, które mogą być przeglądane za pomocą przeglądarki internetowej. Znacznie ułatwia to utrzymanie dokładnej, aktualnej dokumentacji.
polimorfizm.
kolejną ważną cechą języka obiektowego jest polimorfizm, co oznacza, że potomny obiekt nie musi odpowiadać na wiadomość dokładnie tak, jak jego przodek. Nowy obiekt może nadpisać metody rodzica, co powoduje, że nowy obiekt reaguje na wiadomość w inny sposób. Na przykład, wspólną klasą w systemie okien jest komponent, który reprezentuje widoczny obiekt. Komponent jest klasą nadrzędną dla każdego widocznego obiektu na ekranie: ikony, przyciski, menu, suwaki, pola wyboru, przyciski radiowe, a nawet okna. Wszystkie te klasy descendent nadpisują niektóre metody komponentu, aby zmienić zachowanie. Na przykład obiekt ikon musi wyświetlać się jako mały obrazek. Icon nadpisuje metodę rysowania komponentu, aby pokazać obraz.
typowe języki obiektowe
do popularnych języków obiektowych należą Smalltalk, C, Java i inne języki, takie jak BASIC i PASCAL.
Smalltalk.
Smalltalk był oryginalnym językiem zorientowanym obiektowo, opracowanym na początku lat 70.przez Xerox. Od tego czasu wprowadzono kilka wariantów. Nadal jest używany, ale powszechną akceptację utrudniał brak uniwersalnego standardu.
C+ +.
C+ + jest rozszerzeniem języka C, które zapewniało możliwości OOP. Jest to prawdopodobnie najbardziej rozpowszechniony obecnie używany język obiektowy. C jest językiem hybrydowym, ponieważ kompiluje Standardowe programy C; nie wymaga użycia obiektów. Pozwala to na wykorzystanie istniejącego oprogramowania C przy jednoczesnym wykorzystaniu orientacji obiektowej dla nowego oprogramowania. C jest kontrolowany przez normy ANSI.
Java.
Java jest najczęściej akceptowanym językiem czysto obiektowym. Został opracowany przez Sun Microsystems pierwotnie jako język sterowania dla małych urządzeń. Okazał się jednak idealny do użytku z Internetem. Aplet Java może być osadzony na stronie internetowej. Gdy przeglądarka ładuje stronę internetową, ładuje również i wyświetla aplet. Sun nadal utrzymuje ścisłą kontrolę standardu języka.
aby ułatwić obsługę międzyplatformową (praca na zupełnie różnych typach komputerów bez rekompilacji), Java jest zaimplementowana w dwóch częściach. Kompilator tworzy plik obiektowy, który może być wykonany tylko przez maszynę wirtualną Javy (JVM). Dla każdego obsługiwanego systemu operacyjnego (Windows, Unix/Linux lub Solaris) dostępny jest osobny JVM. Dzięki temu Programy Java mogą działać na każdym z tych systemów bez rekompilacji.
inne języki.
większość języków używanych obecnie pozwala na Orientację obiektową. BASIC przekształcił się w obiektowy Visual BASIC; PASCAL w obiektowy DELPHI. Generalnie są to języki hybrydowe, takie jak C, które obsługują orientację obiektową bez jej potrzeby.
Zobacz też Kompilatory; myszy;języki proceduralne.
Donald M. McIver
Bibliografia
Deitel, Harvey M., and Paul J. Deitel. Java: How to Program, 2nd ed. Upper Saddle River, NJ: Prentice Hall, 1998.
Voss, Greg. Programowanie Obiektowe. Wprowadzenie. Osborne McGraw-Hill, 1991.