Obiekt (informatyka) - Object (computer science)

W informatyce , obiekt może być zmienna , a strukturę danych , a funkcja , lub metodę , i jako takie, to wartość w pamięci odwołuje się identyfikator .

W obiektowego programowania paradygmatu , obiekt może być kombinacją zmiennych, funkcji i struktur danych; w szczególności klasa opartych na wahania paradygmatu odnosi się do szczególnego przykładu z klasy .

W modelu relacyjnego z bazy danych zarządzania, obiekt może być tabeli lub kolumny lub stowarzyszenie między danymi a jednostką bazy danych (takich jak odnoszące wiek danej osoby do konkretnej osoby).

Języki obiektowe

Ważnym rozróżnieniem w językach programowania jest różnica między językiem obiektowym a językiem obiektowym. Język jest zwykle uważany za oparty na obiektach, jeśli zawiera podstawowe możliwości obiektu: tożsamość, właściwości i atrybuty. Język jest uważany za zorientowany obiektowo, jeśli jest oparty na obiektach i ma również możliwość polimorfizmu , dziedziczenia, enkapsulacji i ewentualnie kompozycji. Polimorfizm odnosi się do możliwości przeciążenia nazwy funkcji wieloma zachowaniami, w oparciu o które obiekt(y) są do niej przekazywane. Konwencjonalne przekazywanie wiadomości rozróżnia tylko pierwszy obiekt i uważa, że ​​jest to „wysyłanie wiadomości” do tego obiektu. Jednak niektóre języki OOP, takie jak Flavors i Common Lisp Object System (CLOS), umożliwiają rozróżnianie więcej niż pierwszego parametru funkcji. Dziedziczenie to możliwość tworzenia podklas klasy obiektów, tworzenia nowej klasy, która jest podklasą istniejącej klasy i dziedziczy wszystkie ograniczenia danych i zachowania swoich rodziców, ale także dodaje nowe i/lub zmienia jedno lub więcej z nich.

Programowanie obiektowe

Programowanie obiektowe to podejście do projektowania modułowych systemów oprogramowania wielokrotnego użytku. Podejście obiektowe jest ewolucją dobrych praktyk projektowych, które sięgają samych początków programowania komputerowego. Orientacja obiektowa jest po prostu logicznym rozszerzeniem starszych technik, takich jak programowanie strukturalne i abstrakcyjne typy danych . Obiekt jest abstrakcyjnym typem danych z dodatkiem polimorfizmu i dziedziczenia .

Zamiast strukturyzować programy jako kod i dane, system zorientowany obiektowo łączy te dwa elementy przy użyciu koncepcji „obiektu”. Obiekt posiada stan (dane) i zachowanie (kod). Przedmioty mogą odpowiadać rzeczom znalezionym w prawdziwym świecie. Na przykład program graficzny będzie miał takie obiekty jak koło , kwadrat , menu . System zakupów online będzie zawierał takie obiekty jak koszyk, klient, produkt . System zakupowy będzie wspierał takie zachowania jak składanie zamówienia , dokonywanie płatności , oferowanie rabatu . Obiekty są zaprojektowane jako hierarchie klas. Tak na przykład z systemem zakupów nie może być wysokiej klasy, takie jak poziom produktu elektronicznego , produktu kuchni i książki . Mogą istnieć dalsze udoskonalenia na przykład w przypadku produktów elektronicznych : odtwarzacz CD, odtwarzacz DVD itp. Te klasy i podklasy odpowiadają zestawom i podzbiorom w logice matematycznej.

Przedmioty specjalistyczne

Ważnym pojęciem dla obiektów jest wzorzec projektowy . Wzorzec projektowy zapewnia szablon wielokrotnego użytku, który rozwiązuje typowy problem. Poniższe opisy obiektów są przykładami niektórych z najczęstszych wzorców projektowych dla obiektów.

  • Obiekt funkcji : obiekt z pojedynczą metodą (w C++ tą metodą byłby operator funkcji „operator()”), który działa podobnie do funkcji (jak wskaźnik C/C++ do funkcji).
  • Obiekt niezmienny : obiekt skonfigurowany ze stałym stanem w czasie tworzenia, który później się nie zmienia.
  • Obiekt pierwszej klasy : obiekt, którego można używać bez ograniczeń.
  • Obiekt kontenera : obiekt, który może zawierać inne obiekty.
  • Obiekt fabryczny : obiekt, którego celem jest tworzenie innych obiektów.
  • Metaobject : obiekt, z którego można tworzyć inne obiekty (porównaj z klasą , która niekoniecznie jest obiektem).
  • Obiekt prototypowy : wyspecjalizowany metaobiekt, z którego można tworzyć inne obiekty poprzez kopiowanie
  • Bóg obiekt : obiekt, który wie lub robi za dużo (jest to przykład antywzorca ).
  • Obiekt Singleton : obiekt, który jest jedyną instancją swojej klasy w okresie życia programu.
  • Filtruj obiekt : obiekt, który otrzymuje strumień danych jako dane wejściowe i przekształca je w dane wyjściowe obiektu. Często strumienie wejściowe i wyjściowe są strumieniami znaków, ale mogą to być również strumienie dowolnych obiektów. Są one zwykle używane w wrapperach, ponieważ ukrywają istniejącą implementację za pomocą abstrakcji wymaganej po stronie programisty.

Obiekty rozproszone

Podejście obiektowe to nie tylko model programowania. Równie dobrze może być używany jako język definicji interfejsu dla systemów rozproszonych. Obiekty w rozproszonym modelu obliczeniowym są zwykle bardziej ziarniste, trwalsze i bardziej zorientowane na usługi niż obiekty programistyczne.

Standardową metodą pakowania obiektów rozproszonych jest użycie języka definicji interfejsu (IDL). IDL chroni klienta przed wszystkimi szczegółami rozproszonego obiektu serwera. Szczegóły, takie jak komputer, na którym znajduje się obiekt, używany język programowania , system operacyjny i inne problemy specyficzne dla platformy. IDL jest również zwykle częścią rozproszonego środowiska, które zapewnia usługi, takie jak transakcje i trwałość, wszystkim obiektom w jednolity sposób. Dwa z najbardziej popularnych standardów dla obiektów rozproszonych są Object Group Management „s CORBA standardowe i Microsoft ” s DCOM.

Oprócz obiektów rozproszonych zaproponowano szereg innych rozszerzeń podstawowej koncepcji obiektu, aby umożliwić przetwarzanie rozproszone:

  • Obiekty protokołów są składnikami stosu protokołów, które obejmują komunikację sieciową w interfejsie zorientowanym obiektowo.
  • Obiekty replikowane to grupy obiektów rozproszonych (nazywanych replikami ), które obsługują rozproszony protokół wielostronny w celu osiągnięcia wysokiej spójności między stanami wewnętrznymi i odpowiadają na żądania w skoordynowany sposób. Przykłady obejmują odporne na awarieobiekty CORBA .
  • Obiekty rozproszone na żywo (lub po prostu obiekty na żywo ) uogólniająkoncepcję obiektu replikowanego na grupy replik, które mogą wewnętrznie wykorzystywać dowolny protokół rozproszony, co może skutkować jedynie słabą spójnością między ich stanami lokalnymi.

Niektóre z tych rozszerzeń, takie jak obiekty rozproszone i obiekty protokołu , są terminami specyficznymi dla domeny dla specjalnych typów „zwykłych” obiektów używanych w określonym kontekście (takich jak zdalne wywoływanie metod lub kompozycja protokołu ). Inne, takie jak obiekty replikowane i obiekty rozproszone na żywo , są bardziej niestandardowe, ponieważ rezygnują ze zwykłego przypadku, w którym obiekt znajduje się w jednej lokalizacji w danym momencie, i stosują koncepcję do grup jednostek (replik), które mogą obejmować w wielu lokalizacjach, mogą mieć tylko słabo spójny stan, a ich przynależność może się dynamicznie zmieniać.

Sieć semantyczna

Sieć semantyczna jest zasadniczo strukturą obiektów rozproszonych. Dwie kluczowe technologie w Sieci Semantycznej to Język Ontologii Sieciowej (OWL) i Struktura Opisu Zasobów (RDF). RDF zapewnia możliwość definiowania podstawowych obiektów — nazw, właściwości, atrybutów, relacji — które są dostępne przez Internet. OWL dodaje bogatszy model obiektowy, oparty na teorii mnogości, który zapewnia dodatkowe możliwości modelowania, takie jak wielokrotne dziedziczenie .

Obiekty OWL nie są jak standardowe, wielkoziarniste rozproszone obiekty dostępne przez Język Definicji Interfejsu. Takie podejście nie byłoby właściwe dla Internetu, ponieważ Internet nieustannie ewoluuje, a standaryzacja na jednym zestawie interfejsów jest trudna do osiągnięcia. Obiekty OWL wydają się być podobne do rodzajów obiektów używanych do definiowania modeli domeny aplikacji w językach programowania, takich jak Java i C++ .

Jednakże, istnieją ważne różnice pomiędzy obiektami OWL a tradycyjnymi obiektami programowania obiektowego. Tradycyjne obiekty są kompilowane w statyczne hierarchie zwykle z pojedynczym dziedziczeniem, ale obiekty OWL są dynamiczne. Obiekt OWL może zmienić swoją strukturę w czasie wykonywania i może stać się instancją nowych lub różnych klas.

Kolejną istotną różnicą jest sposób, w jaki model traktuje informacje, których obecnie nie ma w systemie. Obiekty programistyczne i większość systemów bazodanowych wykorzystuje „ założenie zamkniętego świata ”. Jeśli jakiś fakt nie jest znany systemowi, zakłada się, że jest on fałszywy. Obiekty sieci semantycznej wykorzystują założenie otwartego świata , oświadczenie jest uważane za fałszywe tylko wtedy, gdy istnieją rzeczywiste istotne informacje, że jest fałszywe, w przeciwnym razie zakłada się, że jest nieznane, ani prawdziwe, ani fałszywe.

Obiekty OWL są w rzeczywistości najbardziej podobne do obiektów w językach sztucznej inteligencji , takich jak KL-ONE i Loom.

W poniższej tabeli porównano tradycyjne obiekty z języków programowania zorientowanego obiektowo, takich jak Java lub C++, z obiektami sieci semantycznej:

Obiekty OOP Obiekty sieci semantycznej
Klasy są traktowane jako typy dla instancji. Klasy są traktowane jako zbiory indywiduów.
Instancje nie mogą zmieniać swojego typu w czasie wykonywania. Członkostwo w klasie może ulec zmianie w czasie wykonywania.
Lista klas jest w pełni znana w czasie kompilacji i nie może się później zmienić. Klasy można tworzyć i zmieniać w czasie wykonywania.
Kompilatory są używane w czasie kompilacji. Błędy czasu kompilacji wskazują na problemy. Reasonery mogą być używane do klasyfikacji i sprawdzania spójności w czasie wykonywania lub w czasie kompilacji.
Klasy kodują większość swojego znaczenia i zachowania za pomocą imperatywnych funkcji i metod. Klasy wyrażają swoje znaczenie w terminach instrukcji OWL. Nie można dołączyć żadnego imperatywnego kodu.
Instancje są anonimowe, o ile nie można ich łatwo zaadresować spoza programu wykonującego. Wszystkie nazwane zasoby RDF i OWL mają unikalny URI, pod którym można się do nich odwoływać.
Zamknięty świat: Jeśli nie ma wystarczających informacji, aby potwierdzić, że zdanie jest prawdziwe, zakłada się, że jest ono fałszywe. Otwarty świat: jeśli nie ma wystarczających informacji, aby udowodnić, że zdanie jest prawdziwe, może być prawdziwe lub fałszywe.

Zobacz też

Bibliografia

Linki zewnętrzne