Я только начал программировать ООП, и я столкнулся с проблемой области. В следующем проекте у меня есть masterClass под названием App. В App-классе есть экраны: экран-класс и класс навигации, так как это дети. Из класса навигации я хочу контролировать, какие экраны будут отображаться. Я не знаю, как это сделать ...Доступ к родительскому классу в правильном порядке OOP
Пожалуйста, проверьте код, чтобы полностью понять мои намерения
Ваша помощь очень ценна, я хотел бы, чтобы действительно научиться программированию, а не просто грязное решение:), но все предложения приветствуются!
// Main Class //
public class App extends Sprite
{
private var screens:Array;
private var screen1:Screen;
private var screen2:Screen;
private var screen3:Screen;
private var screen4:Screen;
public var currentScreen:String;
//
private var navigation:Navigation;
public function App()
{
init();
}
private function init():void {
buildScreens();
buildNavigation();
}
private function buildScreens():void {
screen1 = new Screen();
screen1.name = 'startScreen';
currentScreen = screen1.name;
addChild(screen1);
screen2 = new Screen();
screen2.name = 'irrelevantA';
screen3 = new Screen();
screen3.name = 'irrelevantB';
screen4 = new Screen();
screen4.name = 'irrelevantC';
screens = new Array(screen1, screen2, screen3, screen4);
}
private function buildNavigation():void {
navigation = new Navigation(screens);
}
}
// Screen Class //
public class Screen extends Sprite
{
public function Screen()
{
// creates a new screen
}
}
// Navigation Class //
public class Navigation extends Sprite
{
private var buttons:Array;
public function Navigation(screens:Array)
{
addButtons(screens);
}
private function addButtons(screens:Array):void {
buttons = new Array();
for each(var screen:Screen in screens) {
var button:Button = new Button();
button.link = screen.name;
button.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
buttons.push(button);
}
}
private function mouseDown(e:MouseEvent):void {
// THIS IS WHAT MY QUESTION IS ABOUT: How should I talk to the parent class in an OOP correct way?
// and how can I add and remove a screen in the App class from here?
// Here some of my tries
// I don't think using parent to get there is a good way because next time it might be; parent.parent.parent
trace(e.target.parent.parent.currentScreen);
this.parent.currentScreen;
stage.App.currentScreen;
App.currentScreen;
//---------------------------------
}
}
// Button Class //
public class Button extends Sprite
{
public var link:String;
public function Button()
{
// creates a new button
}
}
wow: D это действительно уровень для меня :) Я думаю, мне придется прочитать это несколько раз, чтобы действительно понять. Ссылки об управлении инверсией и свободном соединении читаю завтра. Спасибо за этот очень полный ответ. Только один вопрос; то, что я узнал о ООП, было то, что все объекты имеют свои обязанности. Я думал, что навигация тогда будет обрабатывать ВСЕ код, который связан с навигацией. То, как я вижу это сейчас, заключается в том, что класс App фактически выполняет некоторую навигацию? или я вижу это неправильно? Спасибо, миллион! – SKuijers
Извините, у меня было много на моей тарелке и я полностью забыл ответить на этот вопрос ... Вы должны увидеть это так: Навигация в этом примере - это всего лишь пучок кнопок. Он выполняет только то, что он должен делать: обрабатывать щелчки мыши пользователя и информировать приложение о том, что было нажато. Фактическое изменение состояния приложения является ответственностью самого приложения (или выделенного компонента контроллера, но это уже другая история). – weltraumpirat
Этот ответ выглядит как отличное лидерство, хотя я бы хотел, чтобы у него было больше деталей. Невероятно, насколько сложно найти полезные статьи о том, как создавать сложные навигационные системы с помощью Flash. – Noahdecoco