Dyskusja:Programowanie obiektowe

Z Wikipedii, wolnej encyklopedii
Przejdź do nawigacji Przejdź do wyszukiwania

Ocena jakości[edytuj kod]

  • Dostateczny/najwyższe - poważne zastrzeżenia do stylu, brak źródeł, wiele stwierdzeń do weryfikacji. --Zyx (dyskusja) 17:36, 18 paź 2010 (CEST)

Dyskusja[edytuj kod]

"Każdy obiekt należy do klasy, która w niektórych językach jest też obiektem, lub przedstawiając sprawę odwrotnie - jest instancją jakiejś klasy." - rety, co za bełkot. Czy ktoś to rozumie?


Napuszony styl, Arystoteles pozal sie boze, brak prostej definicji. Jak by to bylo w 20% tak skomplikowane to by nitk tego nie uzywal. Ilu programistów czytało Arystotelesa? Załosne. Próbowałem zmienic ale nie bede sie bil tam gdzie nie czuje sie specjalista. kakaz


Czy Platon nie był uczniem Arystotelesa? Skąd więc odwrotna kolejność?

Kolejność[edytuj kod]

Pewno się czepiam, ale według mnie "zła" jest kolejność: aktualnie jest abstrakcja, enkapsulacja, polimorfizm, dziedziczenie, a powinno być według mnie abstrakcja, enkapsulacja, dziedziczenie, polimorfizm. dodatkowo w fragmencie o dziedziczeniu jest: Porządkuje i wspomaga polimorfizm(...). No przepraszam bardzo, ale: polimorfizm nie istniałby bez dziedziczenia, natomiast dziedziczenie bez polimorfizmu - czemu nie. więc tak logicznie rzecz biorąc najpierw powino być dziedziczenie a dopiero potem polimorfizm (jako coś a'la rozszerzenie dziedziczenia o genialny mechanizm) i jestem za usunięciem wzmianki: wspomaga. polimorfizm się opiera na dziedziczeniu. --zolv 15:55, 14 wrz 2005 (CEST)

Pod koniec jest drobny błąd, a mianowicie w punkcie "każdy obiekt wywodzi się ze wspólnej klasy (korzenia hierarchii)", czy coś takiego. Niżej Python jest wpisany w działkę NIE, podobnie jak C++, co przecież nie jest prawdą, bo w nowszych edycjach Py wszystko jawnie albo niejawnie dziedziczy po klasie Object, nawet jak się tego nie napisze...


Moim zdaniem cały artykuł jest do przebudowy. Jest napisany w stylu reklamy programowania obiektowego. Osoba nie znająca programowania obiektowego nie dowie się z artykułu nic, a szczególnie na czym polega programowanie obiektowe.

Akapit "Programowanie obiektowe a rzeczywistość" - trzeba przesunąć do dalszej części artykułu lub wyrzucić.

Dalsza część też do przebudowy tak by najpierw pisać co następnie, ewentualnie rekalmy programowania obiektowego.

StoK 22:08, 24 lis 2005 (CET)

"Programowanie zorientowane obiektowo", a "programowanie z użyciem obiektów"[edytuj kod]

"Programowanie zorientowane obiektowo", to odpowiednik ang. Object-Oriented Programming - to o wiele więcej, niż "programowanie z użyciem obiektów", które zwykle nazywane jest ogólnym terminem "programowanie obiektowe". Pisze o tym Jerzy Grębosz w "Symfonii C++".

Można napisać cały program proceduralnie - tak, że procedury będą pobierać z jakichś obiektów wartości pól publicznych, lub prywatnych - poprzez publiczne metody get/set. To będzie program z użyciem obiektów, ale nie zorientowany obiektowo od początku do końca. Program wykorzystujący obiekty można napisać nawet używając graficznych kreatorów okienek (Form) w różnych środowiskach programowania (IDE), jak Form Designer w Visual Studio, czy NetBeans dla Javy, czy jeszcze innych.

Ale tak nie napisze się programu zorentowanego obiektowo, bo jeśli Forma ma zawierać kontrolki (controls) jak (labele, textboxy itp.) odpowiadające wewnętrznej strukturze obiektów, na których pracuje program, to jest to pogwałcenie zasady enkapsulacji - Forma w programie orientowanym obiektowo nie ma prawa wiedzieć więcej o zawartości obiektu klasy np. "Pojazd", niż sam obiekt tej klasy jej przekaże. Tak samo mąż nie wie o problemach z trzustką żony, dopóki ona mu o nich nie powie. Dlatego mąż nie umawia wizyty u lekarza zakładając, że żona może mieć problem z trzustką, a Forma nie ma prawa zawierać textbox'ów na wpisanie np. nazwy marki pojazdu. Bo jeśli w klasie pojazd dopiszemy jeszcze jednego Stringa na właściciela pojazdu, to forma nadaje się już tylko do edycji. A dowolną zmianę w klasie programu zoriantowanego obiektowo można wprowadzić nie dotykając innych klas - pod warunkiem, że zmiana nie narusza kontraktu klasy (czyli np. metoda MainManager.WyswietlPojazd(TenPojazd) przekazuje wskaźnik do obiektu klasy Pojazd, metoda Pojazd.PokazSie(TaForma) zawiera wskaźnik do okna, które ma wyświetlić obiekt klasy Pojazd). A zmiana zawartości czy struktury danych w klasie pojazd nie powinna powodować żadnych zmian w innych klasach. Czyli jeśli dopiszę do klasy Pojazd string Pojazd.właściciel, i obiekt głównej klasy programu każe wyświetlić się instancji klasy Pojazd na Form1, to już Pojazdu głowa, co chce pokazać.

Podobnie, obiekt klasy LampkaNocna obsługujesz (włączasz, wyłączasz, podłączasz do kontaktu, wyłączasz z kontaktu) tak samo niezależnie od wartości zmiennej - private: String kolor; czy od zawartego w niej obiektu klasy Żarówka. Ciebie to nie interesuje, czy tam jest 60W, 40W, 25W, czy 15W. Dopóki Obiekt LampkaNocna jest kompletny, używasz tylko interfejsów IWłącznik oraz IWtyczka.

Oczywiście, programu orientowanego obiektowo nie da się wyklikać. Taki program trzeba już napisać. Niemniej jednak, trzeba sobie zdawać sprawę z tego, że klikając i uruchamiając procedury automatycznej generacji kodu, można stworzyć najwyżej program z użyciem obiektów, który nigdy nie będzie reprezentował podejścia w pełni zorientowanego obiektowo.

Szersze wyjaśnienie różnicy jest zawarte w próbce książki "Projektowanie zorientowane obiektowo. Wzorce projektowe." Wydanie II (Autorzy: Alan Shalloway, James R. Trott Tłumaczenie: Piotr Rajca ISBN: 83-7361-782-5 Tytuł oryginału: Design Patterns Explained. A New Perspective on Object-Oriented Design, 2nd Edition. Próbkowy rozdział jest dostępny na stronie jednego z polskich wydawnictw informatycznych/sklepów internetowych.

Postaram się trochę uzupełnić ten art. i strony dot. UML. Zachęcam do dyskusji nad ich kształtem. Na razie stworzę zalążki. Wydaje mi się, że dobrze byłoby stworzyć kategorię programowanie obiektowe. Jeszcze nie wiem, jak się tworzy kategorie, ale to kwestia czasu. Pozdrawiam, --Nj 15:08, 3 wrz 2006 (CEST)

Tłumaszenie object-oriented programming[edytuj kod]

Programowanie zorientowane obiektowo jest błędnym tłumaczeniem object-oriented programming właściwe tłumaczenie to Programowanie obiektowe tak jak tytuł artykułu (dzięki Ci Wikipedio). Niektórzy boją się przetłumaczyć OOP jako Programowanie obiektowe, bo wydaje im się że Programowanie obiektowe to object programming (czyli fuj - bo to oznacza albo programowanie obiektów ... fuj, albo programowanie przy użyciu obiektów ... fuj, albo coś jeszcze gorszego).

P. Grębosz pisząc, że programowanie z użyciem obiektów, zwykle nazywane jest ogólnym terminem programowanie obiektowe miał rację, szkoda tylko, że nie zaznaczył, że termin programowanie obiektowe jest zarezerwowane dla czegoś więcej niż programowanie z użyciem obiektów. Powinien był zaznaczyć, że to nie to samo i tyle - natomiast napisał "zwykle nazywane jest" i niektórym utkwiło w głowie, że to to samo.

P. Grębosz pisząc, że Programowanie zorientowane obiektowo, to odpowiednik ang. Object-Oriented Programming też miał rację, ale dlaczego nie napisał, że jest to tylko dosłowne tłumaczenie (?!) - a dosłowne tłumaczenie to nie tłumaczenie - to tylko pomaga (czasami) zrozumieć znaczenie słów w obcym języku.

Po drugie nikt w potocznym języku informatyków, ani w środowiskach uniwersyteckich nie używa terminu Programowanie zorientowane obiektowo - chyba tylko Ci którzy chcą zabłysnąć "dobrym" tłumaczeniem. Nikt ich nie poprawia, bo poprawiacze musieliby się nagadać tyle co ja albo więcej (i wymądrzać tyle co ja albo i więcej ;) ).

Proponuję zapamiętać wszystkim tłumaczom object-oriented programming = programowanie obiektowe natomiast object programming = {programowanie obiektów, programowanie przy użyciu obiektów, albo inne kwiatki}. Nie możemy pozwolić na to, aby to straszne, dosłowne tłumaczenie Programowanie zorientowane obiektowo pojawiało się w tytułach książek - już tak się stało, o czym pisze Wikipedysta Nj we wcześniejszym komentarzu.

Ciesze się, że nie jestem jedyny, że Wikipedia dobrze przetłumaczyła ten termin. Nikt nie protestował, że powinno być programowanie zorientowane obiektowo :) ?

CoperNick 16:40, 23 maja 2007 (CEST)

Na Wikipedii obowiązuje polska terminologia informatyczna, a nie dosłowne tłumaczenia. Zarówno w mowie potocznej, jak i w literaturze powszechnie używa się zwrotu programowanie obiektowe, więc tak jest też na Wikipedii. Należy pamiętać, że język polski nie jest językiem angielskim. Mamy własną gramatykę, własną semantykę, słowa i części mają własne znaczenie, które nie pokrywają się z językiem angielskim, a przy tłumaczeniach trzeba też myśleć, by dany zwrot był w ogóle prosty w użyciu. A protestować, protestowali. Choćby dzisiaj na podstronie do zgłaszania błędów musiałem z 5 tytułów książek wymienić, by uzasadnić, że nazwa tego artykułu jest w porządku. --Zyx (dyskusja) 15:47, 27 sty 2011 (CET)

C# a reflektywność[edytuj kod]

W C# klasa jest obiektem - instancją klasy Type, pobrać ją można z dowolnego obiektu metodą GetType() odziedziczoną po Object, bądź operatorem typeof() na podstawie identyfikatora klasy.


Popieram, powinno być zmienione.