Objective-C, возникли проблемы с правильным наследованием ivars для подклассов и методов - PullRequest
0 голосов
/ 27 февраля 2012

Первый вопрос здесь , я искал вокруг и боюсь, что не знаю точную терминологию того, что я пытаюсь сделать - пожалуйста, не нападайте на меня, если его уже спросили.Направь меня в правильном направлении, и я прочитаю.

У меня есть класс:
"Shape" (Of NSObject)
Подклассы "Shape" включают в себя:
"circle" и т. Д.- каждый со своими соответствующими методами calcArea (вычислить площадь).

Мои подклассы отлично работают, поскольку индивидуумы получают класс "Круг" для установки иваров (используя методы "Форма" в "Форме" и наследуют их, затем вычисляют площадьиспользуя их.

Что я хочу сделать: я хочу иметь возможность устанавливать параметры для объекта "Shape". Затем я хочу, чтобы эти параметры распространялись на каждый из подклассов ("Circle", "«Треугольник» и т. Д.), Чтобы я мог ввести два параметра, и он дает мне все мои вычисления площади и окружности для каждого подкласса. Каждый из методов подкласса, например, является «calcArea».


Теории:
-Грубый форсирование использования двух переменных в моем основном методе для сброса каждого параметра для каждого подкласса. это кажется действительно неэффективным, но работает.

-использование «id»основнойСделайте так, чтобы этот объект создавал параметры в «Shape» для каждого подкласса, а затем циклически проходил через каждый подкласс, пока все не были закончены.Пробовал пару вещей, не могу понять.

- создание объекта в «Shape», который затем выполняет каждую из функций своих подклассов - это звучит плохо из того, что я прочитал, суперклассы не должныне знаете, что делают их подклассы ... могу ли я создать метод в "Shape", который выполняет [myCircle calcArea] и [myTriangle calcArea]? *

-Я неправильно проектирую эту программу.


Заранее спасибо за помощь!

1 Ответ

1 голос
/ 27 февраля 2012

Если я вас правильно понял. В ООП подклассы наследуют все атрибуты своих суперклассов. Итак, когда у вас есть:

@interface Shape : NSObject {
     int _mParam;
}
-(int) calcArea;
@end

вы можете получить доступ к _mParam в ваших подклассах. Затем создайте подкласс:

@interface Circle : Shape {
}
-(id) init:(int) param;
-(int) calcArea;
@end

-(id) init:(int) param {
    ....
    _mParam = param;
    ....
}

-(int) calcArea {
    //some calculations here
    return M_PI*r*r + _mParam;
}
...