一般的に、私はほとんどのプログラミング関連の概念を非常にうまく伝えることができると思います。
それでも、フィールド、クラス、パッケージの関係を要約するのはまだ難しいと思います。
「フィールド」、「クラス」、「パッケージ」、および「それらの関係」をどのように要約しますか?
一般的に、私はほとんどのプログラミング関連の概念を非常にうまく伝えることができると思います。
それでも、フィールド、クラス、パッケージの関係を要約するのはまだ難しいと思います。
「フィールド」、「クラス」、「パッケージ」、および「それらの関係」をどのように要約しますか?
C、C++、および Java を教えて以来、私は同様の問題に直面してきました。これが私がすることです:
まず、パッケージを分けて保管し、最後に説明します。
理想的には、学生は最初に ADT について、できれば C で学ぶべきだと思います。構造体があり、それに対して個別の操作があります。フィールドは単に構造体の「スロット」であり、それを示すためにメモリ レイアウトを表示することもできます。関数は、それらの構造体を操作する別個のエンティティです。
次に、クラス、メソッド、およびフィールドに移行し、本質的に (継承といくつかの逸話を除いて) それらが多くの点で ADT の構文糖衣であることを示します。
必要に応じて、オブジェクト レイアウト、継承、および仮想テーブルを教えることができます (私の経験では、メモリ レイアウトを確認することで、学生が継承をよりよく理解するのに役立ちます)。
最後に、クラスを一緒に編成する方法のトピックに到達します。C++ を教える場合、実際にはパッケージはありませんが、名前空間について説明し、編成と個別のコンパイルについて説明できます。
Java を使用している場合は、これらが同じ名前空間内のクラスのコレクションであり、特別なアクセス規則があり、それらを表示していることを説明するだけです。いずれにせよ、Java のパッケージ システムはちょっと壊れているので、通常はパターン (たとえば、UI パッケージを C から分離する) を使用します。
要約すると、クラスは、いくつかのフィールドとそれらを操作する関連メソッドのメモリ配置であるオブジェクトの基礎を形成します。パッケージは、もう 1 つのアクセス制限メカニズムを持つクラスのコレクションです。
私がそれを説明する方法は次のとおりです。
したがって、フィールドはオブジェクトの実装の詳細であり、そのクラスはパッケージ内に存在して、一意の名前を保証し、ライブラリのようなモジュール性を提供します。
興味深いことに、あなたはオブジェクトについて言及せずに OO プログラミングに取り組みました。それがあなたの問題かもしれないと思います。
これが私が使用するものです。
オブジェクトは物です。それらには属性 (測定値、存在の状態など) があります。属性はフィールドと呼ばれます。[これを説明するために、教室で見つけたもの -- カップ、マーカー、帽子、コートなどをよく使用します。]
オブジェクトは、メソッド、メソッド関数、または操作と呼ばれる動作にも関与します。
オブジェクトの機能 (属性と操作、フィールドとメソッドなど) は、オブジェクトを分類する方法を提供します。
オブジェクトのクラスに共通する機能は、まあ、クラス定義にまとめることができます。クラス定義は、クラスのメンバーであるオブジェクトの属性とメソッドを記述します。
パッケージは、クラス定義のコレクションです。理想的には、パッケージ内のクラスには共通点がありますが、それは要件ではなく、有用な区別ではありません。
説明しようとしている人の年齢に応じて、使用できる簡単なアナロジーがあります。納税申告書です。納税フォーム (たとえば 1040EZ など) はクラスのようなもので、フォームに記入する各スペースはフォームのフィールドです。納税フォームには、フィールド内のデータに対して実行されるメンバー関数がクラスに含まれているのと同様に、フィールド内の情報をどう処理するかについての指示も含まれています。納税申告書の完全なセットには、主要な納税申告書だけでなく、記入が必要なその他の書類 (追加のスケジュールなど) が含まれているのと同様に、パッケージには、主要なクラスだけでなく、対話する必要がある他のクラスも含まれます。と。
フィールドは、クラスまたはクラスのオブジェクト インスタンスに属する変数です。ローカル変数とフィールドの違いは、フィールドの方がスコープが広いことです。
クラスは、ユーザー定義のデータ型のテンプレートです。クラスは、状態と動作の両方を備えているため、プリミティブ データ型よりも高度です。
パッケージは、クラスをグループ化し、潜在的な名前の競合を解決するために使用されます。複数の開発者と公開されているコード ライブラリを使用すると、クラスに同じ名前を付ける可能性が非常に高くなります (Math、LinkedList、FileUtils など)。クラス名の前に一意のパッケージ名を付けると、コンパイラ (および他の開発者) は、使用するクラスを決定できます。