Obiekty
Posted on Wed 11 June 2008 in Uncategorized
• [1 min read]
We wszystkich do tej pory przeglądanych przeze mnie książkach o programowaniu gdy tłumaczono czym jest obiektowość przywoływano jakiś przykład, a to samochód, a to owoc, czasem też człowieka. Samochód miał cechy takie jak np. kolor, ilość drzwi, itp. oraz metody które wykorzystywano np. do wprawiania auta w ruch.
W trakcie czytania "Języka programowania LISP" natknąłem się na bardzo przyjazny fragment dotyczący obiektówki. Idzie to tak:
(define (twórz stos)
(let ((stos '()))
(lambda (komun . listaarg)
(cond ((eq? komun 'dołóż)
(set! stos (cons (car listaarg) stos)))
((eq? komun 'zdejmij)
if (null? stos)
(error "Stos jest pusty")
(let ((góra (car stos)))
góra)))
((eq? komun 'pusty?)
(null? stos))
(else (error "Nieznany komunikat"
komun))))))
Tworzymy stos:
(define stos-1 (twórz stos))
I używamy metod:
(stos-1 'dołóż 1)
(1)
(stos-1 'dołóż 2)
(2 1)
(stos-1 'zdejmij)
(2)
(stos-1 'pusty?)
#f
Dopisek w 2026 roku
Wrzuciłem do ChatGPT 5.2 i zapytałem czy autor miał rację, bo sam już tego nie pamiętam a prześledzenie kodu sprawia mi problem. LLM odpisał:
Krótko: tak, autor ma rację co do idei – to jest obiektowość w sensie „obiekt = stan + operacje + enkapsulacja”. Ale nie jest to klasyczne OOP z klasami i dziedziczeniem, tylko tzw. message passing object zrobiony przez domknięcie (closure). To dokładnie model obiektu znany z: - Object-oriented programming - Smalltalk (wszystko jest wysyłaniem komunikatów) Dlaczego to jest obiekt? Bo spełnia 3 kluczowe cechy: - Enkapsulacja: stos jest zamknięty w let. Nie da się go zmienić z zewnątrz. - Stan: stos przechowuje dane. - Interfejs: Dostęp wyłącznie przez komunikaty.