Czytałem Wczesną historię Smalltalk i jest kilka wzmianek o „zadaniu”, które każą mi podważyć moje rozumienie jego znaczenia:
Chociaż OOP pochodzi z wielu motywacji, dwie były kluczowe. Na dużą skalę należało znaleźć lepszy schemat modułów dla złożonych systemów obejmujących ukrywanie szczegółów, a na małą skalę - znaleźć bardziej elastyczną wersję przypisania, a następnie spróbować całkowicie ją wyeliminować.
(od 1960–66 - wczesne OOP i inne kształtujące idee lat sześćdziesiątych , sekcja I)
To, co otrzymałem od Simuli, to to, że możesz teraz zastąpić wiązania i zadania celami . Ostatnią rzeczą, którą chciałbyś, aby każdy programista zrobił, to bałagan ze stanem wewnętrznym, nawet jeśli jest przedstawiony w przenośni. Zamiast tego obiekty należy przedstawić jako miejsce zachowań wyższego poziomu, bardziej odpowiednie do wykorzystania jako komponenty dynamiczne . (...) Niestety, większość tego, co dziś nazywa się „programowaniem obiektowym”, to po prostu programowanie w starym stylu z bardziej wyszukanymi konstrukcjami. Wiele programów jest obciążonych operacjami typu „przypisania”, wykonywanymi teraz przez droższe dołączone procedury.
(ze stylu „obiektowego” , sekcja IV)
Czy mam rację, interpretując intencję, że obiekty mają być fasadami, a jakakolwiek metoda (lub „wiadomość”), której celem jest ustawienie zmiennej instancji na obiekcie (tj. „Przypisanie”), pokonuje cel? Ta interpretacja wydaje się poparta dwoma późniejszymi stwierdzeniami w sekcji IV:
Cztery techniki zastosowane razem - stan trwały, polimorfizm, tworzenie instancji i metody jako cele dla obiektu - stanowią znaczną część mocy. Żadne z nich nie wymaga zastosowania „języka obiektowego” - ALGOL 68 można niemal odwrócić do tego stylu - a OOPL jedynie skupia umysł projektanta w konkretnym owocnym kierunku. Jednak robienie prawa do enkapsulacji jest zobowiązaniem nie tylko do abstrakcji stanu, ale także do wyeliminowania zorientowanych na państwo metafor w programowaniu.
...i:
Opisy zadań - nawet abstrakcyjne - wyrażają cele na bardzo niskim poziomie, a więcej z nich będzie potrzebnych, aby cokolwiek zrobić. Zasadniczo nie chcemy, aby programista bałaganował stanem, czy był symulowany czy nie.
Czy uczciwie byłoby powiedzieć, że zachęca się tu do tworzenia nieprzejrzystych, niezmiennych przypadków? Czy odradza się po prostu bezpośrednie zmiany stanu? Na przykład, jeśli mam BankAccount
klasę, to OK, aby mieć GetBalance
, Deposit
i Withdraw
metody instancji / komunikaty; upewnij się, że nie ma SetBalance
metody / komunikatu instancji?