-
1. Data: 2009-02-03 21:29:15
Temat: [Objective-C] Enkapsulacja
Od: "Tomek[TK]" <t...@N...pl>
Witam
Od jakiego czasu przyszlo mi pisac aplikacje w jezyku dosc mocno
promowanym przez Apple'a - mam tutaj na mysli jezyk Objective-C.
Przyznam, ze wiele rzeczy zwiazanych z tym jezykiem dziala mi na nerwy.
Zalozmy, ze mam taki kod:
@interface A: NSObject
{
}
-(id) metodaInicjalizujaca;
-(void) metoda;
@end
Chcialbym przerobic powyzszy interfejs w taki sposob aby ukryc wszystkie
metody interfejsu NSObject. Przede wszystkim nie chce dopuscic do tego,
aby dozwolony byl zapis:
A* obj = [[A alloc] init];
tylko
A* obj = [[A alloc] metodaInicjalizujaca];
Bylbym wdzieczny za jakiekolwiek wskazowki.
--
pozdrawiam
Tomasz Krzos
http://tkrzos.com/
-
2. Data: 2009-02-03 23:39:41
Temat: Re: [Objective-C] Enkapsulacja
Od: porneL <n...@p...net>
On Tue, 03 Feb 2009 21:29:15 -0000, Tomek[TK] <t...@n...pl> wrote:
> Chcialbym przerobic powyzszy interfejs w taki sposob aby ukryc wszystkie
> metody interfejsu NSObject. Przede wszystkim nie chce dopuscic do tego,
> aby dozwolony byl zapis:
>
> A* obj = [[A alloc] init];
>
> tylko
>
> A* obj = [[A alloc] metodaInicjalizujaca];
>
>
> Bylbym wdzieczny za jakiekolwiek wskazowki.
Nadpisz init. Jeśli nie potrzebujesz parametrów, to sprawa załatwiona.
Jeśli parametry są niezbędne, to dobrze by było dopuścić ustawienie ich potem:
x = [[A alloc] init]
[x setFoo:foo]
W ostateczności możesz nadpisać init tak, żeby zwracał nil albo wyrzucał wyjątek,
jeżeli nie został wywołany z twojej alternatywy, ale to jest wbrew nieformalnemu
protokołowi nakazującemu, że wszystkie konstruktory mają odpalać self = [super init]
oraz wbrew relacji is-a, ponieważ z obiektem klasy NSObject nie będzie można robić
wszytkiego tego, co z NSObject (coś a'la circle-ellipse problem).
--
http://pornel.net
this.author = new Geek("porneL");
-
3. Data: 2009-02-04 08:22:26
Temat: Re: [Objective-C] Enkapsulacja
Od: Tomasz Krzos <t...@w...pl>
porneL pisze:
> Nadpisz init. Jeśli nie potrzebujesz parametrów, to sprawa załatwiona.
Niestety, ale potrzebuje.
> Jeśli parametry są niezbędne, to dobrze by było dopuścić ustawienie ich
> potem:
> x = [[A alloc] init]
> [x setFoo:foo]
Jest to jakies rozwiazanie, ale myslalem, ze da sie to zrobic bardziej
elegancko.
> W ostateczności możesz nadpisać init tak, żeby zwracał nil albo wyrzucał
> wyjątek,
Myslalem o tym, ale ostatecznie zrezygnowalem z tego rozwiazania. Mimo
wszystko dziekuje za odpowiedz.
--
Tomasz Krzos
http://tkrzos.com