安卓面向对象编程

7

我在使用Eclipse进行Android基础编程方面的一些尝试。目前,我正在查看一本书并尝试着书中提供的示例代码。

我注意到,在这本特定的书中,到目前为止所有的示例都是在Main-Activity中进行的。考虑到我具有传统Java背景,我不认为这是很好的面向对象编程实践。

这是否是移动平台的通用做法?难道类不应该都包含在它们自己的文件中吗?


你能否提供一些示例来更好地说明你的问题? - Eric Levine
1
面向对象编程并不总是最佳实践;而将程序拆分成数千个文件也并不总能产生良好的面向对象程序。 - Lie Ryan
3个回答

6
不一定,因为Android中的Activity是一个“特殊情况”类。如果您还没有这样做,我建议您阅读应用基础,特别是应用组件下的“Activities”部分...

一个activity代表一个具有用户界面的屏幕。例如,电子邮件应用程序可能有一个显示新邮件列表的activity,另一个用于撰写电子邮件的activity,以及另一个用于阅读电子邮件的activity。虽然这些活动共同形成电子邮件应用程序中连贯的用户体验,但每个活动都独立于其他活动。因此,不同的应用程序可以启动其中任何一个活动(如果电子邮件应用程序允许)。例如,相机应用程序可以启动电子邮件应用程序中撰写新邮件的活动,以便用户共享图片。

请注意我用粗体突出的文本部分。重点是,一个 Activity 本身并不是完整的应用程序,如果允许的话,任何第三方应用程序都有可能调用你的应用程序中的一个 Activity。因此,通常会尽可能使 Activity 自包含。一个特殊的例子是使用像 AsyncTask 这样的东西,它提供了执行后台线程以及操作 UI 的方法 - 嵌套一个扩展 AsyncTask 的私有类是相当普遍的,并简化了代码。嵌套扩展 BroadcastReceiver 的类也是出于同样的原因而普遍存在。
话虽如此,对于 POJO 帮助类使用单独的 Java 类文件并没有什么不好,这只取决于你的应用程序有多复杂,但这可能意味着要特别考虑某些 Android 类的工作方式 - 特别是如果在单独的类文件中定义了 AsyncTask 类,则需要尝试一下,你就会知道我的意思。 :-)

3
事实上,Activity 几乎是一个独立的应用程序,这意味着它完全不同于完全包含在一个大类中。任何应用程序都可以说是“自包含”的,但这并不意味着所有代码都应该在一个类中。正如你所引用的那样,“活动共同形成应用程序中的一个连贯用户体验”,实际上期望在活动之间共享 UI 和功能的部分内容。 - vgru
1
@Groo:“Activity几乎是一个应用程序本身...” - 不,这正是许多新接触Android的人所认为的,即他们认为“Activity”与“应用程序”是同义词。实际上,一个应用程序可以有数十个组件(Activities、Services、BroadcastReceivers、Content Providers)。我并不是建议所有Activities都应该包含所有内容 - 我的观点是Activities通常是非常简单的单个“页面”UI,执行非常简单的操作,并且因此通常可以包含它们需要的所有内容。如果需要共享代码,则可以使用辅助类。 - Squonk
+1 好的,我想我读帖子时太肤浅了,现在我明白了:你提到“自包含”的Activity是完整应用程序的一部分。确实,您不需要将应用程序的每个部分拆分为多个文件(或类),但在进行TDD编程时,通常很好能够单独测试每个最小的组件,因此我大多数时候都会朝这个方向发展。但是,TDD也不是万能的。我确实使用私有类来分解类功能的复杂部分,然后在需要时进行重构。 - vgru

5

面向对象编程(OO)是将功能放入类中。你编写这些类的方式决定了它是否是良好的OO代码(尽管这有争议)。所有这些类是在一个或几个文件中,还是每个类都有自己的文件,这是一种品味问题,而不是直接涉及OO问题。

由于这是一本(我想是)小样本的书,因此阅读方式可能与所有类都在单独文件中时一样容易。


0

如果您使用适当的面向对象编程,可以更快、更高效地创建基于模板的应用程序。

例如,如果您有一个通用数据库应用程序,并且可以通过进行轻微更改来使用多个数据库,则应努力实现此目标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接