正确的面向对象应用程序设置

时间:2009-12-30 21:57:08

标签: iphone objective-c oop

我正在尝试学习我的第一门编程语言。不幸的是我选择了Iphone开始。认为这很容易......哎呀。无论如何4周后我实际上有几个工作的应用程序!有点......

我的一个应用程序有几个文本框和几个标签。 每个人都有一个启动计时器的按钮,该计时器递减标签的文本以进行倒计时。

我有2个单独的计时器,可以激活两个单独的方法,这些方法可以增加变量,播放歌曲,更新某些标签等相对于每个人的方法。不是战争,而是关于代码的数量,但是每次我弄清楚如何做一些新的东西时都不想要改变这两套。

有什么更好的方法来设置它,以便我可以使用每人一组代码?我把整个“人”作为一个对象的想法,它应该是它自己的类,我应该从我所做的所有阅读中对它进行子类化。我只是不知道如何实际应用它与实际代码。

2 个答案:

答案 0 :(得分:2)

我认为首先要意识到定时器(几乎总是)是接口的一部分而不是数据模型的一部分。除非您有一组非常奇怪的要求,否则定时器根本不应与您的人员数据对象相关。

您希望在数据和界面之间保持严格的分离。这是严重错误的Model-View-Controller模式背后的关键思想。它应该被称为模型 - 控制器 - 视图,以反映控制器在模型和视图之间进行调解。

在您的情况下,听起来您有一个人物对象是您的数据模型。理想情况下,该模型可以在没有任何特定接口的直接链接的情况下工作。一个好的数据模型将适用于标准视图,Web视图甚至基于文本的命令行界面。它对您的模型无关紧要,因为它只涉及存储或操作数据,而不考虑它的显示或使用方式。

更新接口的定时器属于控制器,因为它们与数据无关。在不同接口中显示的相同数据将需要不同的定时器。您可能只需要一个只调用控制器中的方法的计时器,该方法根据需要更新所有界面元素。在该方法中,控制器然后从数据模型中的适当对象(在您的情况下为person类的实例)中提取它需要显示的数据。

例如,假设您有多个人物对象,每个人物对象都有自己的倒计时数字。您可以将人物对象中存储的倒计时值作为属性。控制器中的单个计时器每秒触发一次,并在控制器中调用方法。然后该方法将询问每个人对象的倒计时值。在被要求输入值时,人物对象将自动减少倒计时值。

通过这种设计,您可以处理任意数量的人物对象,每个人物对象具有自己的倒计时属性,只需一个计时器和控制器中的一个方法。

答案 1 :(得分:0)

我们可以谈论面向对象设计几个小时甚至几个月和几年。设计原则是通过经验和大量实践最好地学习和掌握的。

如果你需要2个定时器,每个定时器调用一个扮演独特角色的方法,那么你可能会遇到2个定时器。如果您的两个计时器中有共同的任务/职责,您可以创建一个抽象计时器来实现这些常见任务,并将其扩展为更具体的行为(方法实现)。

我发现基于角色的设计在很多情况下都很有用,但正如我所说,你必须练习,当然还要了解面向对象和继承的基础知识。