ホームページ > Java > &#&チュートリアル > オブジェクト指向の導入

オブジェクト指向の導入

Barbara Streisand
リリース: 2024-12-31 18:04:11
オリジナル
296 人が閲覧しました

この章では、オブジェクト指向 (OO) について学び、それがソフトウェア システム開発プロセスにもたらす利点を探ります。

ソフトウェア開発オブジェクト指向 (OO)が必要なのはなぜですか?

この質問に答えるために、まず 構造化プログラミング 手法 (関数型プログラミング とも呼ばれます) を使用してソフトウェア システムがどのように設計されるかを (簡単に) 見てみましょう。

1.構造化プログラミング:

構造化プログラミングにおける一般的な方法は、問題を分析し、それを関数に分解して特定のタスクを実行することです。これらの関数のほとんどは、処理するデータ型を必要とします。 機能 システム内のデータは通常、データベース に保存されるか、グローバル変数 としてメモリに保持される場合があります。

学校管理システムの簡単な例を見てみましょう。このシステムには、学校内のすべての生徒と講師の詳細が保存されます。同時に、学校で提供されているコースに関する情報を管理し、どの学生がどのコースを受講しているかを追跡します。

システムは、生徒教師試験、およびコースに関する情報を保存する必要があり、次のような機能を備えて設計されています。

  • 学生を追加
  • 試験に入力してください
  • check_exam_marks
  • 証明書の発行
  • 学生を追い出す

そこから、次のようにデータ、関数、依存関係の図を構築できます。
Introduce Object Orientation

このアプローチの問題は、解決している問題が複雑になりすぎると、システムの保守がますます困難になることです。上記の例で、「誕生年」 を 2 単語の数値から 4 桁に変換するなど、リクエストによって Student のデータ処理方法が変更された場合はどうなるでしょうか?この小さな変更だけでも、予期せぬ 副作用 を引き起こし、深刻な問題を引き起こす可能性があります。 試験コース、および教師のデータはすべて生徒のデータに依存します。さらに、add_student、enter_for_exams、issue_certificate、および expel_student 関数が壊れている可能性があります。たとえば、add_student は、「誕生年」に 4 桁ではなく 2 桁のデータが必要になるため、確実に機能しなくなります。

上記の例から、関数とデータ間の相互依存を含む構造化プログラミングのいくつかの欠点がわかり、保守が困難拡張が困難かつ予期せぬ問題に遭遇しやすいデータを変更するとき。これらの問題を解決するには、新しいアプローチが必要です。それがオブジェクト指向 (OO)です。

2.オブジェクト指向:

2.1.コンセプト:

オブジェクト: は、2 つの主要コンポーネントから構成される特定のエンティティとして理解できます:

  • 属性: オブジェクトの情報と特性です。

  • メソッド: オブジェクトが実行できる操作とアクションです。

上記の問題 学校管理システム の例から、次のオブジェクトが得られます:
Introduce Object Orientation

クラス: は、オブジェクトが持つ事前定義されたプロパティとメソッドを含むデータ型です。クラスをオブジェクトを作成するためのテンプレートとして理解できます。

例: クラス Student は、名前、誕生年、学校への入学などのその他の行為などの共通のプロパティとメソッドを含む、すべての生徒に共通の定義テンプレートです。被験者は2004年生まれという名前の特定の学生で、クラス学生

の特徴を持っています。

2.2. OOP の基本原則:

カプセル化

カプセル化とは、効果的な管理と使用を目的として、関連するプロパティとメソッドを同じクラスにグループ化することです。これにより、複雑さが軽減され、セキュリティが向上すると同時に、コードの保守と拡張が容易になります。

public class Student {
    private String name;
    private String dateOfBirth;


    public void registerForCourse(Course course) {
        course.addStudent(this);
    }
}
ログイン後にコピー
ログイン後にコピー

学生情報は Student クラスにカプセル化され、Student に関連するアクションはこのクラスのメソッドを通じて実行されます。

継承

継承により、子クラスが親クラスのプロパティとメソッドを継承して、ソース コードを最適に再利用し、機能を簡単に拡張できます。

public class Person {
    private String name;
    private String dateOfBirth;
}

public class Student extends Person {
    private double gpa;
}

public class Teacher extends Person {
    private String department;
}
ログイン後にコピー

StudentTeacher はどちらも person クラスを継承しており、共通プロパティの再利用に役立ちます。各サブクラスは個別のプロパティまたはメソッドを追加できます。

ポリモーフィズム

ポリモーフィズムにより、メソッドをさまざまな方法で実装できます。つまり、メソッドを異なる動作を持つサブクラスで再定義できます。

public class Person {
    public void introduce() {
        System.out.println("I am a person.");
    }
}

public class Student extends Person {
    @Override
    public void introduce() {
        System.out.println("I am a student.");
    }
}

public class Teacher extends Person {
    @Override
    public void introduce() {
        System.out.println("I am a teacher.");
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        Person student = new Student();
        Person teacher = new Teacher();

        person.introduce(); // I am a person.
        student.introduce(); // I am a student.
        teacher.introduce(); // I am a teacher.
    }
}
ログイン後にコピー

introduce メソッドは person クラスで定義され、Student および Teacher サブクラスでオーバーライドされます。 person タイプが使用されていても、introduce メソッドを呼び出すとき、システムは実際のオブジェクト (Student または Teacher) の適切なメソッドを使用します。 )、多態性を示します。

抽象化

抽象化は、特定の実装の詳細にあまり焦点を当てずに一般的な概念を使用して、柔軟性を高め、複雑さを軽減する方法です。

public class Student {
    private String name;
    private String dateOfBirth;


    public void registerForCourse(Course course) {
        course.addStudent(this);
    }
}
ログイン後にコピー
ログイン後にコピー

Abstraction では、ジェネリック メソッド (startCourse()) を使用して抽象クラス (Course) を定義します。 MathCourseScienceCourse などのサブクラスはこれらのメソッドを詳細に実装し、システムの拡張とカスタマイズを容易にします。

3.オブジェクト指向プログラミングの利点:

  • 継承のおかげで、コードを繰り返さずにクラスを拡張できるため、冗長性が最小限に抑えられ、効率が向上します。
  • 時間を節約し、生産性を向上させます。
  • クラスとオブジェクトの概念は、構造指向プログラミングの制限を克服しながら、コンピューター上で現実世界のエンティティをより自然かつ明確にシミュレートするのに役立ちます。

以上がオブジェクト指向の導入の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート