Nie mogę wymyślić lepszego miejsca wśród rodzeństwa SO, aby postawić takie pytanie. Początkowo chciałem zapytać „Czy python jest czystym językiem OO?” ale biorąc pod uwagę problemy i pewien dyskomfort, jaki ludzie odczuwają, próbując zdefiniować termin, postanowiłem zacząć od uzyskania jasnej definicji samego terminu.
Byłoby raczej uczciwe zacząć od korespondencji dr Alana Kay, który wymyślił ten termin (zauważ inspirację w analogii biologicznej do komórek lub innych żywych obiektów).
Istnieją następujące sposoby podejścia do zadania:
- Podaj analizę porównawczą, wymieniając języki programowania, które mogą wykazywać (lub nie potrafią tego zrobić), pewne właściwości unikalne i wystarczające do zdefiniowania tego terminu (chociaż Smalltalk, Scala,
Javaitd. - to możliwe przykłady, ale IMO w ten sposób nie wydaje się tak naprawdę kompletne ani owocne ) - Podaj formalną definicję (lub blisko niej, np. W bardziej akademickim lub matematycznym stylu).
- Podaj filozoficzną definicję, która całkowicie opierałaby się na semantycznym kontekście konkretnego języka lub doświadczeniu programowania a priori (musi istnieć pewna szansa na skuteczne wyjaśnienie przez społeczność).
Moja obecna wersja: „Jeśli określony język programowania ( formalny ), który może ( gramatycznie ) rozróżniać operacje i operandy, a także wnioskować o typie każdego operandu, czy ten typ jest obiektem (w sensie OOP), czy nie, wówczas wywołujemy taki język jest językiem OO, o ile istnieje co najmniej jeden typ w tym języku, który jest przedmiotem. Wreszcie, jeśli wszystkie typy języka są również obiektami, definiujemy taki język jako czysty (silny) język OO. ”
Byłbym wdzięczny za każdą możliwą poprawę. Jak widać, właśnie uzależniłem definicję od terminu „obiekt” (często w pełni określany jako klasa obiektów).
[EDYTOWAĆ]
Ponadto używam (na szczęście dobrze rozumianego) pojęcia typu jak w językach pisanych na maszynie. Programowanie typu danych lub programowanie zorientowane na typ jest nie tylko interpretacją składniową (tekstu programu, tj. Jak traktować pewne wartości literałów i zmiennych danych - coś, co ewoluuje w bezpieczeństwo typu), ale można je przypisać gramatyce języka i studiować formalnie (z wykorzystaniem logiki matematycznej) jako tak zwane systemy typów . Zauważ, że wymaganie od określonego systemu typów tak zwanego typu uniwersalnego jest jednym ze sposobów określających czystość języka OO (istnieją sposoby rozszerzenia tego semantycznie).
NB
jak odpowiedzieć :
- pomaga, jeśli podasz książkę lub odniesienie, które wspierają / wyjaśniają twoje rozumienie terminologii i pojęć (zwykle dobra definicja obejmuje lub odwołuje się do wszystkich pojęć zależnych oprócz elementarnych).
- jeśli to możliwe, wskaż wciętą kategorię swojej odpowiedzi / definicji, jeśli nie jest jasne inaczej (patrz wyżej: 1 - według przykładu językowego, 2 - logiki matematycznej, 3 - opisu technicznego i filozofii programowania)
- Klasyfikacja jest ważne (a także dlatego, że określenie czysta-oo, wchodzi określenie OO) odpowiadając Spróbuj unmix elementów OO paradygmatu innych dobrze znanych sposobów (i w żadnym wypadku nie mylić / pokrywają się je, na przykład zwykle elementy programowania modułowej mogą być pokryte / wcielony w programowanie OO): spróbuj odróżnić OOP od (w tym lub będącego częścią) programowania funkcjonalnego, programowania logicznego (szczególnie silnie wyspecjalizowanego), typów danych Abstarct (ADT), modułowego, metaprogramowania (generics i czas makroekspresji LISP), Kontrakty (np. Eiffel), aspektowe (AO), (różnica między klasyfikacją deklaratywną i funkcjonalną, a także historyczne definicje struktury Dijkstry są jasne)
na trudność podania formalnej definicji : co zaskakujące, bardzo łatwo jest podać matematyczny opis OOP w postaci pewnego logicznego (formalnego) systemu (najprawdopodobniej opartego na typie) i definiowania jednej koncepcji po drugiej. Można nawet spróbować zrobić coś bardziej praktycznego poprzez stosowanie tego formalizmu do kontroli bezpieczeństwa typ lub nowych aspektów projektu język niż tylko abstrakcyjnego rozrywki lub ćwiczeń (również odnośników formułowania OOP w intuicjonistycznej Type Theory , zależnych rodzaju , niezależnie, w formalizmach fol jak lambda rachunku i po prostu za pomocą teorii kategorii). Najważniejsze jest to, że nic dziwnegotakie sformułowania IMO są silnie stronnicze (błędne) przez najprawdopodobniej początkowo niepełne zrozumienie OOP (w inżynierii komputerowej), a następnie stają się prawie niedostępne (a więc prawie nie przyczyniają się wstecz do świata programowania - być może z wyjątkiem pewnego procentu znalezienie aplikacji z powrotem ze świata formalnego przez bycie zintegrowane z popularnymi językami ).
Tak, trudno jest podać dokładnie „dobrą” definicję, a nie tylko definicję. Ale jestem pewien, że pytam o to tutaj z powodu twojego doświadczenia i bezpośredniego zaangażowania, chłopaki.