O obiektowości

2010-02-12 16:58

Kiedy programiści się nudzą, to często spierają się o terminologię. Przedmiotem takich sporów są zwykle nieco mgliste określenia, które czasami – zwykle niesłusznie – używane są jako atrybuty oceniające. Przykład? Choćby “obiektowość” – w zależności od punktu widzenia stwierdzenie, że dany kod/biblioteka/moduł/itp. są bardziej lub mniej obiektowe może stanowić albo zaletę, albo wadę. Zależy to głównie od ‘poglądów’ danej osoby na temat użyteczności podejścia OO w programowaniu.

Co to jednak znaczy, że dany kod jest obiektowy?… Nie uważam wcale, że należy go w tym celu napisać go w języku obiektowym. Twierdzę na przykład, że Windows API jest całkiem dobrym przykładem biblioteki realizującej obiektowy paradygmat, mimo tego że została ona stworzona w jak najbardziej strukturalnym C. Praktyczna różnica między poniższymi wywołaniami:

  1. foo->DoSomething (...);
  2. DoSomething (foo, ...);

jest bowiem właściwie żadna. Dodajmy do tego fakt, że z punktu widzenia programisty-użytkownika w WinAPI występuje zarówno dziedziczenie (rodzajów uchwytów), jak i polimorfizm (funkcje niezależne od typu uchwytów, np. CloseHandle), a więc bardzo obiektowe feature‘y.
Jeśli komuś wydaje się to naciągane i twierdzi, że w ten sposób pod obiektowość można podciągnąć właściwie każdy kod, to już spieszę z przykładem ukazującym, że tak nie jest. Otóż większa część biblioteki OpenGL obiektowa na pewno nie jest, zaś w tych nielicznych miejscach gdzie OOP jest niemal konieczny (jak zarządzanie teksturami czy buforami wierzchołków) pojawia się nieco dziwna koncepcja ‘indeksów’ używanych do identyfikowania poszczególnych obiektów.

Dla niektórych (łącznie ze mną) taki interfejs nie jest szczytem marzeń, a preferowane jest wyraźnie obiektowe podejście DirectX. Absolutnie jednak nie zgadzam się z twierdzeniem, że DirectX jest lepszy, bo bardziej obiektowy – to trochę tak jak powiedzenie, że ten obrazek jest ładniejszy, bo bardziej zielony. W obu przypadkach jest to kwestia gustu i nie powinniśmy zakładać, że cechy pozytywne dla nas są tak samo dobrze odbierane przez innych.
A wyższość DirectX nad OpenGL da się przecież uargumentować na wiele innych, lepszych sposobów :)

Tags: , , ,
Author: Xion, posted under Programming, Thoughts »


3 comments for post “O obiektowości”.
  1. :::
    February 12th, 2010 o 18:55

    Gdzieś spotkałem się z takim oto rozróżnieniem:

    * obiektowy – operujący na obiektach implicite,
    np. w stylu WinAPI: SetWindowXXX(handle)

    * zorientowany obiektowo – operujący na obiektach explicite,
    np. Window::SetXXX()

  2. moriturius:
    February 12th, 2010 o 20:02

    O! Jeden z moich ulubionych tematów do kłótni! :P

    No ale nie chcę się kłócić tym razem. Tym razem po prostu chciałbym się nie do końca zgodzić z tą obiektowością WinAPI ;) Nie przekonałeś mnie przykładem OpenGL bo tam nikt by się obiektowości nie spodziewał [ bo to jak spodziewanie się hiszpańskiej inkwizycji ].

    Wydaje mi się, że obiektowość ma służyć, głównie programistom [dla użytkownika to bez znaczenia – ważne że działa]. Ale chodzi mi o wszystkich programistów, a prawdę mówiąc nie chciałbym być tym, który musi coś dodać/zmieniać w WinAPI, co w dobrze napisanym programie obiektowym POWINNO być łatwe. Jednak jak wszyscy wiemy z praktyką jest różnie :P

  3. nilphilus:
    February 13th, 2010 o 14:00

    Odważne stwierdzenie ;-) Tyle że OOP daje znacznie więcej niż:
    foo->DoSomething (...);
    DoSomething (foo, ...);

    Może i jest to jakiś zalążek, ale to tyle.

Comments are disabled.
 


© 2017 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.