Wyobraźmy sobie, że mamy jakąś osobę, której chcemy wręczyć łapówkę. Niestety nasza klasa definiująca osobę nie posiada funkcji służącej do wręczania łapówek:
public class Osoba { }
Rozbudujmy więc naszą klasę (polskie znaki zostały użyte w celu podniesienia przejrzystości kodu):
public class Osoba {
void dajWŁapę(int kwota) { }
}
Okej... Chwilkę, przecież nie wszystkie osoby muszą być od razu skorumpowne...
Tada! Tak już lepiej. No nie zupełnie... Rokita* mógłby się obrazić (*edit: pisane w 2005 roku...).
public class Polityk extends Osoba {
void dajWŁapę(int kwota) { }
}
Teraz chyba wszystko jest już w porządku:
public class SkorumpowanyPolityk extends Polityk {
void dajWŁapę(int kwota) { }
}
Taaa... A co z urzędnikami, lekarzami, etc? Wszyscy biorą w ten sam sposób. Trzeba zdefiniować wspólną metodę (interfejs). Oto nasz "sposób" na wręczanie łapówek dla wszystkich skorumpowanych osób:
public interface Skorumpowany {
void dajWŁapę(int kwota);
}
1. Teraz możemy wziąć dowolną osobę:
Osoba jakaśOsoba = ...
2. Sprawdzić, czy jest skorumpowana:
if (jakaśOsoba instanceof Skorumpowany)
3. I w końcu wręczyć łapówkę:
Skorumpowany.class.cast(jakaśOsoba).dajWŁapę(1000); // Java 5.0 i nowsza
((Skorumpowany)jakaśOsoba).dajWŁapę(1000); // Java starsza niż 5.0
4. A nasza nowa klasa opisująca skorumpowanego polityka, wygląda tak:
public class SkorumpowanyPolityk extends Polityk implements Skorumpowany {
void dajWŁapę(int kwota) { }
}
A to przykładowy algorytm zamykający wszystkie skorumpowane osoby w Polsce ;-)
for (Osoba osoba : wszyscyMieszkańcyPolski) {
if ((osoba instanceof Skorumpowany) && !(osoba instanceof Immunitet))
doPaki(osoba);
}
Proszę o komentarz
Hmmm... Obrazowo to wszystko pokazane, nie powiem...
Chociaż chyba bym trochę zmienił "doPaki(osoba);" na:
if(sąd(osoba).wyrok == 'skazujący')
doPaki(osoba);
No bo jak to, karać bez sądu?
Wlasnie sie ucze Javy i musze powiedziec ze ten algorytm bardzo mi pomogl w zrozumieniu kilku rzeczy :P
heh, właśnie... skąd można zassać jakiś darmowy IDE do javy wraz z kompilatorkiem i podpowiadaniem składni..? bo chciałem się kiedyś javą pobawić.., a Microsoft Visual J++ nie posiadam...
wszystko fajnie w tej javie, multiplatformowość szczególnie, ale zbyt szybka chyba nie jest np. takie IDE które znalazłem http://www.jcreator.com/, jest napisane w c++, chociaż do javy...
JCreator is written entirely in C++, which makes it fast and efficient compared to the Java based editors/IDE's.
hmmm... IDE do Javy w C++? To przebija nawet IDE do C++ w Delphi :P
Tu jest NetBeans razem z kompilatorem (120MB) + Dokumentacja API (40MB):
http://java.sun.com/j2se/1.5.0/download.jsp
Prawde mówiąc, to używam NetBeans dopiero od kilku dni. KDevelop też wspiera Javę, ale trochę kuleje przy nowej składni Javy 5.0. Jest też megawypasione(tm) Eclipse :)
Rzeczywiście NetBeans trochę się ślimaczy i długo się uruchamia, ale to pewnie z powodu nadmiaru funkcji :)
dzięki...
hm... z tego co widzę w tym łapówkowym przykładzie, to java jest podobna do c++, mam nadzieję że nawet bardziej niż mi się zdaje...
Składnia jest podobna, ale niestety nie ma wielu fajnych rzeczy z C++
Chociaż niektórzy uznają to za plus
Ale np. API nie można stosować? Tj. nie można wykorzystać windowsowego API... bo to nie będzie wtedy kontatybilne z innymi systemami operacyjnymi, czy może nie ma w ogóle takiej opcji...
może nie jasno to powiedziałem... można używać w Javie windowsowe DLL'e..?
Tak, poprzez JNI :)
to dobrze... niewiele mi to mówi (wiem Java Native Interface).. ale fajnie że jest taka opcja :P, bo np. taki zlib.dll się czasem może przydać
Akurat zlib jest wbudowany w Javę :)
ty, faktycznie to całkiem możliwe... znowu się głupotą popisałem w końcu pliki *.jar to zwykłe zipy... ;)
Java ma działać Wszędzie(TM) a weź uruchom windowsianą DLLkę na Solarisie na SPARCu ;)
GRATULUJĘ !!! Bardzo polski przykład :)
Pisze się „WZIĄĆ”!
Poza tym średnio śmieszne, ale starasz się ;)
Niestety, do przeczytania tego artykułu myślałem,że rozumiem interfejsy.
Co dzieje sie z wartością [kwota].
Więcej pytań niż odpowiedzi.
Nie no rewelacyjnie szukałem o co chodzi w interfejsach—>„międzymordziach” w Javie a tutaj jest extra napisane i wyjaśnione
!(osoba implements Immunitet)) <— w javie nie ma takiej konstrukcji.
@tataoposa: nie wiem skąd mi się to wzięło :) Poprawione, dzięki
Faktycznie dobrze wytłumaczone ;-) Trafiłem tutaj przypadkiem, Javy nigdy nie tykałem, a już zobaczyłem, jak rozwiązuje się w niej pewne rzeczy.
Jakoś do tej pory nikt nie potrafił mi wytłumaczyć interfejsów a tu... Chyba to polska mentalność i przyzwyczajenie do tego że łapówki to coś normalnego.
tam jest chyba błąd powinno być:
public class SkorumpowanyPolityk extends Polityk implements Skorumpowany(tutaj Skorumpowana zamiast Skorumpowany ;)) {
void dajWŁapę(int kwota) { }
}
I już wiem o co chodzi z interfejsami;P Dzięki!
Nie wiem skąd wzięła się metoda: weźJakąśOsobę(); nie jest nigdzie zdefiniowana. Mam do zaimplementowania metody interfejsu, które w samym interfejsie są puste i są definiowane poza interfejsem gdzieś indziej i dalej nie wiem jak ich użyć w mojej aplikacji. :/ Nie powiem, że wiem mniej niż wiedziałem ale dalej nic nie wiem :) Masło maślane o pośladek wsmarowane .. i tyle na ten temat ..