web-dev-qa-db-ja.com

「オブジェクトファースト」アプローチは良いアイデアですか?

デビッド・バーンズ著「Javaを使った最初のオブジェクト:BlueJを使用した実用的な入門」にあるように、プログラミング初心者は1日目からオブジェクトを学ぶべきだと思いますか?それとも悪い考えだと思いますか?

本に不慣れな方のために、 here は各章で説明されているトピックのリストです:

第1章では、オブジェクト指向の最も基本的な概念であるオブジェクト、クラス、メソッドについて説明します。 Java構文の詳細に踏み込むことなく、これらの概念を確実に実践的に紹介します。また、いくつかのソースコードを最初に見ていきます。グラフィカルな例を使用してこれを行います。インタラクティブに描画できる図形、および単純な実験室クラスの登録システムの2番目の例。

第2章では、クラス定義を開き、オブジェクトの動作を作成するためにJavaソースコードがどのように記述されているかを調査します。フィールドの定義方法とメソッドの実装方法について説明します。ここでは、最初のタイプのステートメントも紹介します。主な例は券売機の実装ですが、第1章のラボクラスの例を振り返って、さらに詳しく調査します。

次に、第3章では、画像を拡大して、複数のオブジェクトの相互作用について説明します。お互いのメソッドを呼び出して共通のタスクを実行することにより、オブジェクトがどのように連携するかを確認します。また、1つのオブジェクトが他のオブジェクトを作成する方法についても説明します。 2つの数値表示オブジェクトを使用して時間と分を表示するデジタル目覚まし時計の表示について説明します。 2番目の主要な例として、メールクライアント間でメッセージを送信できる電子メールシステムのシミュレーションを調べます。

第4章では、オブジェクトのより広範な構造を構築します。最も重要なのは、オブジェクトのコレクションの使用を開始することです。コレクションを紹介する電子手帳やオークションシステムを導入しています。同時に、コレクションの反復について説明し、ループについて最初に説明します。使用されている最初のコレクションはArrayListです。この章の後半では、特殊な形式のコレクションとして配列を、別の形式のループとしてforループを紹介します。アレイの使用例として、Webログアナライザーの実装について説明します。

第5章では、ライブラリとインターフェイスについて説明します。 Java標準ライブラリを紹介し、いくつかの重要なライブラリクラスについて説明します。さらに重要なこととして、ライブラリのドキュメントを読み、理解する方法について説明します。ソフトウェア開発プロジェクトでドキュメントを書くことの重要性について説明します。最後に、独自のクラスに適したドキュメントを作成する方法を練習します。この章で遭遇するクラスの例は、ランダム、セット、マップです。これらのクラスを適用するために、エリザのような対話システムとバウンドするボールのグラフィカルシミュレーションを実装します。

第6章では、適切に動作するオブジェクトというタイトルで、正しく、理解しやすく、保守可能なクラスの作成に関連する問題のグループ全体を扱います。明確で理解しやすいコードの記述(スタイルやコメントを含む)からテストやデバッグに至るまでの問題をカバーしています。テスト戦略が導入され、多くのデバッグ方法が詳細に説明されています。これらのトピックについては、予定の日記の例と電子計算機の実装を使用します。

第7章では、問題ドメインを実装用のクラスに分割する問題について、より正式に説明します。責任主導の設計、結合、凝集、リファクタリングなどの概念を含む、クラスの設計に関する問題を紹介します。このディスカッションでは、インタラクティブなテキストベースのアドベンチャーゲーム(World of Zuul)を使用します。ゲームの内部クラス構造を改善し、その機能を拡張するためのいくつかの反復を経て、学生のプロジェクトとして実行できる拡張機能の提案の長いリストで終わります。

第8章と第9章では、継承とポリモーフィズムを紹介し、関連する詳細な問題の多くを取り上げます。概念を説明するために、CDとビデオの単純なデータベースについて説明します。コードの継承、サブタイプ、ポリモーフィックメソッドの呼び出し、およびオーバーライドの問題について詳しく説明します。

第10章では、捕食者/被食者シミュレーションを実装します。これは、継承に基づく追加の抽象化メカニズム、つまりインターフェースと抽象クラスについて説明するのに役立ちます。

第11章では、画像ビューアとサウンドプレーヤーという2つの新しい例を紹介します。どちらの例も、グラフィカルユーザーインターフェイス(GUI)の作成方法について説明します。

次に、第12章では、エラーの処理方法の難しい問題を取り上げます。考えられるいくつかの問題と解決策について説明し、Javaの例外処理メカニズムについて詳しく説明します。概念を説明するために、アドレス帳アプリケーションを拡張および改善します。

第13章では、次のレベルの抽象化である、漠然と記述された問題をクラスとメソッドに構造化する方法について詳しく説明します。前の章では、アプリケーション構造の大部分がすでに存在していると想定し、改良を加えてきました。さて、私たちが白紙の状態から始める方法について話し合う時が来ました。これには、アプリケーションを実装するクラスとは何か、それらがどのように相互作用するか、および責任がどのように分散されるかについての詳細な議論が含まれます。映画予約システムを設計する際に、この問題に取り組むためにクラス責任者(CRC)カードを使用します。

第14章では、すべてをまとめ、本の前の章の多くのトピックを統合しようとします。これは、アプリケーション設計からクラスインターフェイスの設計まで、多くの重要な機能的および非機能的特性と実装の詳細について説明するまでの完全なケーススタディです。以前の章で説明したトピック(信頼性、データ構造、クラス設計、テスト、拡張性など)は、新しいコンテキストで再び適用されます。

4
fredoverflow

私は個人的に、学習するのに最も簡単なプログラミングの概念は、単純な手続き型ロジック(たとえば、フロー図を表す)に従うものだと思います。次に学ぶのが最も簡単なのは、現実世界(車、犬、人など)との類似点を教えることができる基本的なオブジェクトです。

つまり、簡単に言うと、1日目は基本的な制御ロジックを教えることから始めて、その後、オブジェクトにかなり早く移動できると思います。

関数型プログラミングは、数学的なバックグラウンドを持っているか、そのように考えていない限り、おそらく新しいプログラマーに教えるのが最も難しいでしょう。

この答えのYMMV :-)

10
Martijn Verburg

BlueJの状態は今はよくわかりませんが、David BarnesとMichaelKöllingに教えられ、2004年から2006年にかけてこの本とBlueJを使用しました。

ワークベンチを用意して、オブジェクトが互いにどのように相互作用するかを確認するのは良いことです。

Martijnが基本フローがプログラムを理解する最も簡単な方法であると述べたように、BlueJとObjects Firstアプローチの問題は、Main()から隔離され、オブジェクトとその相互作用に集中できるようにアプリケーションが起動する方法です。

BlueJは、OOおよびJava言語を学習するのに最適ですが、一度OOに慣れたら、Eclipseなどに移動して、その知識を使い始めます。 IDEでアプリケーションを構築するには、OO/Javaを学ぶのではなく、アプリケーションを構築するために設計されています。

2
StuperUser

私は、Objects FirstとBlueJで教えられたクラスに参加しました。予想よりも強力なプログラミングの背景でクラスに参加したとき、プログラミングの知識がまったくなかったクラスメートは、教えられた順序に混乱し続けていました:何を説明せずにArrayListの使用の詳細を教えるなど「配列」という用語は、「リスト」という用語の意味、または「パブリック」の意味を第5章(デバッグ後)まで説明しないか、「for」のほぼ1週間前(「私たちが本を読んだ率)。

彼らはまた、Eclipseに移行したときに基本的な方法を完全に失い、プロジェクトを開始する方法や、特殊なBlueJインターフェースなしでオブジェクトを作成する方法がわかりませんでした。私が家庭教師をしていた人が約10回「BlueJのやり方が嫌いだ」と言った後、私は彼女にEclipseをセットアップし(これはコースで使用または教えられたことはありません)、基本を説明する必要がありました。

本質的にはいい考えですが、そのテキスト内で恐ろしく実行されます。

1
Yamikuronue