metody ustaw i pobierz |
metody ustaw i pobierz |
13.01.2010, 16:23:53
Post
#1
|
|
Grupa: Zarejestrowani Postów: 266 Pomógł: 0 Dołączył: 4.01.2007 Skąd: Szczecin Ostrzeżenie: (0%) |
Czytając książke o OOP, nie rozumiem metod ustaw i pobierz...
Po co takie metody tworzyć? Nie można działać bezpośrednio na danych składowych? np.
|
|
|
13.01.2010, 16:38:42
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
W twoim przypadku nie ma sensu tworzyć takich metod.
Tworzy się je wtedy jeżeli musisz skontrolować typ wartośći jaką podaje użytkownik do podanej właściwości. Np użytkownik podal liste elementów w formie stringa a nie tablicy i dzięki "setter"om takie coś sprawdzisz i skontrolujesz. Podobnie jest z innymi typami.
Gettery mogą mieć też parę innych przydatnych właściwości jak kontrola co i kiedy zwracać w wynikach. Poniżej jest kontrola wyświetlania elementu.
Ten post edytował wookieb 13.01.2010, 16:41:09 -------------------- |
|
|
13.01.2010, 16:48:47
Post
#3
|
|
Grupa: Zarejestrowani Postów: 266 Pomógł: 0 Dołączył: 4.01.2007 Skąd: Szczecin Ostrzeżenie: (0%) |
Np.
private $inactivespanname = "inactive"; żeby zmienić danę składową piszemy settera? Po co wtedy getter?
|
|
|
13.01.2010, 17:51:00
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) |
Po to zeby wartosc wyswietlic/pobrac bez niego takie cos:
Zwroci blad tak samo z protected. -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
13.01.2010, 18:50:57
Post
#5
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) |
W celu zachowania Enkapsulacji/Hermetyzacji. Niektórzy uważają nawet ( w tym ja ) że wszystkie zmienne klas powinno się opatrywać modyfikatorami private lub protected <edit>( ewentualnie protected )</edit>. Innymi słowy nie powinno się pozwalać na dostęp do zmiennych składowych klasy z poza niej samej.
Ten post edytował orglee 13.01.2010, 18:57:59 |
|
|
14.01.2010, 16:48:28
Post
#6
|
|
Grupa: Zarejestrowani Postów: 266 Pomógł: 0 Dołączył: 4.01.2007 Skąd: Szczecin Ostrzeżenie: (0%) |
No właśnie bo wookieb mówi o danych wprowadzonych przez usera. Jeżeli dane składowe sa private to po co setter, getter?
|
|
|
14.01.2010, 16:53:12
Post
#7
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
No właśnie bo wookieb mówi o danych wprowadzonych przez usera. Jeżeli dane składowe sa private to po co setter, getter? Po to, żeby mieć do nich dostęp (jako, że nie są to pola publicznie nie można ich sobie ot tak po prostu bezpośrednio ustawić, no chyba że magiczny setter/getter, ale to inna bajka), jeśli zachodzi taka potrzeba i żeby ten dostęp w jakiś sposób móc kontrolować/filtrować etc. Standardowo klasy nie pozwalają na dostęp do składowych o dostępie innym niż publiczny, toteż należy utworzyć getter i setter. Tylko o to chodzi w tym przypadku. -------------------- Nie pomagam na pw, tylko forum.
|
|
|
14.01.2010, 21:55:45
Post
#8
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
Klasy w wielu obiektowych lub obiektowo orientowanych językach mają 3 tryby dostępu: publiczny (public), prywatny (private) i chroniony (protected). Różnica między nimi jest taka, że do publicznego możesz się odwoływać bezpośrednio
$obiekt_klasy -> atrybut a więc zapis i odczyt są jawne. Wystarczy znać strukturę danych. Prywatne są zabezpieczone i nie odczytasz ich ani nie zapiszesz nic do nich bez metod, które sama klasa Ci udostępnia. Odwołanie jak do publicznego spowoduje błąd. Jest to zabronione. Dlatego właśnie musisz napisać metodę, która pozwala go ustawić lub odczytać, a więc pozwala zrobić tak: $obiekt_klasy -> odczytaj_pole_X(); Dostęp chroniony jest w samej klasie widoczny jako prywatny, ale klasa która po niej dziedziczy zamienia go w prywatny w swojej klasie (to zależy od języka programowania, gdyż w pewnych może on stać się publicznym ). Normalnie bowiem klasa nie dziedziczy pól klasy rodzica, a więc można powiedzieć, że dziecko wszystkie pola rodzica "zapomina", poza oczywiście tymi będącymi protected. Jeśli więc masz klasę A, zaś w niej pola public, private i protected, to po utworzeniu z niej klasy potomnej B znajdziesz wewnątrz tylko te, które były protected, ale będą one już teraz private (lub public w określonych językach). Jak więc widzisz definicja dostępu sprawia, że pola zachowują się różnie. Inaczej do nich odwołujesz, inaczej zachowują w przypadku tworzenia klasy pochodnej. Ale to są podstawy obiektówki, więc radzę Ci dobrze się przyłożyć do nich bo im głębiej w las tym więcej drzew o jakie można się rozbić. Ten post edytował thek 14.01.2010, 22:02:49 -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
14.01.2010, 22:53:33
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Thek... ale namieszałeś. Pyta o kompletne podstawy na forum PHP, to tłumacz tylko na przykładzie PHP, z którym będzie pracować.
O modyfikatorach dostępu pisać nie będę bo IIRC jest to kompletnie opisane w manualu. Po co stosować gettery/settery? 1) Wspomniana hermetyzacja 2) Kontrola danych 3) Bardziej przyszłościowe rozwiązanie - zawsze można w przyszłości coś dodać, zachowując niezmienny zewnętrzny interface. |
|
|
14.01.2010, 23:54:12
Post
#10
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
Ja mu zrobiłem przyspieszony kurs z modyfikatorów dostępu Można to maksymalnie rozwijać na kilka stron choćby, ale wolałem mu to przekazać "w pigułce". Jak na mnie i tak krótki post, a myślę, że opisałem to bardzo przystępnie. Raczej trudno to będzie opisać bardziej łopatologicznie, bez rozwlekania i sypania przykładami.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
15.01.2010, 00:00:03
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
No to zapomniałeś opisać o takich modyfikatorach jak chociażby pakietowy (z Javy). W C# istnieje chyba jeszcze pakietowy chroniony (ale nawet nie jestem pewien - nie znam tej tech., a przeszukiwać MSDN mi się nie chce :]).
|
|
|
15.01.2010, 00:08:10
Post
#12
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D |
Wiesz... Można by jeszcze dodać od biedy static Jest to w końcu także pewna forma dostępowa zmiennej o zasięgu ograniczonego nie tyle do obiektu klasy co wszystkich obiektów tejże klasy.
Ten post edytował thek 15.01.2010, 00:08:34 -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
15.01.2010, 00:44:42
Post
#13
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) |
Modyfikatory dostępu/specyfikatory w Javie, które mnie najbardziej zaintrygowały to: native oraz synchronized
-------------------- Nie pomagam na pw, tylko forum.
|
|
|
15.01.2010, 01:15:41
Post
#14
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Native: gdy mamy jakąś metodę napisaną np. w C/C++ - więcej na: http://mindprod.com/jgloss/native.html
Synchronized: blokuje metodę/blok kodu dla innych wątków - więcej na: http://mindprod.com/jgloss/synchronized.html |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 07:27 |