2011-09-10 12 views
7

私はEclipseを使ってAndroidでいくつかの基本的なプログラミングをしています。私は現在、本を見て、その本に書かれているサンプルコードを試しています。アンドロイドオブジェクト指向プログラミング

私は、この特定の本ではこれまでのすべての例がメインアクティビティでペースを取っていることに気付きました。私はこれが非常に良いオブジェクト指向のプログラミングの練習であるとは思わない、私は伝統的なJavaの背景からです。

これはモバイルプラットフォームの一般的なプラクティスですか?すべてのクラスを自分のファイルに含めるべきではありませんか?

+0

あなたの質問をよく説明するための例を投稿できますか? – elevine

+1

OOPは必ずしもベストプラクティスではありません。数千のファイルに分割しても必ずしも良いOOPプログラムが生成されるわけではありません。 –

答えて

6

クラスはすべて自分のファイルに含まれていてはなりませんか?

必ずしもAndroidとしてではないActivityは「特別なケース」クラスです。あなたはまだ行っていない場合は、私はあなたがApplication Fundamentals特にApplication components下の「活動」に関するセクションを読んでお勧めしたい...

活動は、ユーザーインターフェイスを単一の画面を表しています。たとえば、電子メールアプリケーションには、新しい電子メールのリスト、電子メールを作成する別のアクティビティ、電子メールを読むための別のアクティビティが表示されます。 アクティビティは連携して電子メールアプリケーションで一貫したユーザーエクスペリエンスを形成しますが、それぞれのアクティビティは他と独立しています。そのため、異なるアプリケーションがこれらのアクティビティのいずれかを開始できます(電子メールアプリケーションで許可されている場合)。たとえば、カメラアプリケーションは、ユーザーが画像を共有するために、新しいメールを作成する電子メールアプリケーションでアクティビティを開始できます。

太字で強調したテキストのセクションに注意してください。ポイントは、Activity自体が完全なアプリではなく、許可されている場合は、サードパーティのアプリがアプリのいずれかでActivityを呼び出す可能性があるという点です。したがって、Activityをできるだけ自己完結型にするのが一般的です。 1つの特定の例は、AsyncTaskのようなものを使用し、バックグラウンドスレッドを実行しUIを操作するメソッドを提供します。AsyncTaskを拡張するプライベートクラスを入れ子にしてコードを単純化します。 BroadcastReceiverを拡張するネストクラスも同じ理由で一般的です。

つまり、POJOヘルパークラスに別のJavaクラスファイルを使用することは間違いありません。たとえば、アプリの複雑さになりますが、特定のAndroidクラスの仕組みAsyncTaskクラスは特に別のクラスファイルに定義されている場合には、それを試してみてください。 :-)

+3

アクティビティは、それ自体でほぼアプリケーションであるという事実は、それが完全に大きなクラスに含まれていることとは完全に反対であることを暗示する必要があります。すべてのアプリケーションは、多かれ少なかれ「自己完結型」です。これは、すべてのコードが単一のクラスに含まれるべきではありません。あなたが引用したように、*「アクティビティは連携してアプリケーションで一貫したユーザーエクスペリエンスを形成する」*、実際にはアクティビティ間でUIと機能の一部が共有されることが期待されます。 – Groo

+1

@Groo:「アクティビティがほぼアプリであるという事実」...これはまったくAndroidの新機能の多くが信じているもので、「アクティビティ」は「アプリ」と同義です。実際には、アプリケーションには数多くのコンポーネント(アクティビティ、サービス、ブロードキャスト受信者、コンテンツプロバイダ)があります。私は、すべてのアクティビティにすべてが含まれるべきであるということを示唆しているわけではありません。重要なのは、アクティビティは非常に単純なアクションを実行する非常に単純な単一の「ページ」UIであることが多いからです。共有コードが必要な場合は、ヘルパークラスを使用できます。 – Squonk

+0

+1私は記事をあまりにも表面的に読んでいると思いますが、今すぐ入手します:完全なアプリケーションの一部として「自己完結型」の「アクティビティ」を参照しました。アプリのすべての部分を複数のファイル(またはクラス)に分割する必要はありませんが、TDDプログラミングを行うときは、最小のコンポーネントを別々にテストできるのがうれしいことが多いので、ほとんどの時間その方向。しかしもう一度、TDDは銀の弾丸でもありません。私はクラスの機能の複雑な部分を分解するためにプライベートクラスを使い、必要なときにそれらをリファクタリングします。 – Groo

5

OOはクラスに機能を入れています。あなたがそれらのクラスを書く方法は、それが良いかどうかを定義します(これは議論の余地がありますが)。これらのクラスがすべて単一ファイルか複数ファイルか、または各クラスが独自のファイルを持っているかどうかは、趣味の問題であり、OOの問題ではありません。

これは小さなサンプルのある本ですので、すべてのクラスが別々のファイルにある場合と同じように読みやすいでしょう。

0

適切なOOPを使用すれば、テンプレートベースのアプリケーションをより迅速に作成することができます(&)。

たとえば、汎用データベースアプリケーションを使用していて、複数のデータベースを軽度の変更で使用できる場合は、これを行うように努めてください。

関連する問題