■ 注意事項
・本稿では「オブジェクト指向とは何か」ということで、いくつか解説を行っている。
・複数の解説を提示した理由は、初級者が「オブジェクト指向とは何か?」ということが、理解しにくいと考え、複数の解説を行い、そのうちのどれかで納得してもらえば、オブジェクト指向への理解が早まると考えた。
・本稿で解説するのは「クラスベースのオブジェクト指向」、「プロトタイプベースのオブジェクト指向」というものもあるが、こちらは解説しない。
■ オブジェクト指向を勉強する意味
・オブジェクト指向は、現在のプログラミング言語の到達点
・現在の主流の言語は、オブジェクト指向言語
Java、PHP、Ruby、Python、C#などなど
・現在のシステム開発のほとんどは、オブジェクト指向言語で行われている
・オブジェクト指向の考え方を身につけることは、非常に重要
■ オブジェクト指向の由来
・パロアルト研究所
・smalltalk
■ オブジェクト指向の目的あるいはメリット
・開発の効率化
・品質の向上
・再利用(プロジェクト内および流通)
■ オブジェクト指向とは何か - 0
・オブジェクト指向とは、以下の技法によるプログラミングである。
・抽象化(クラスの作成)
・カプセル化
・抽象化(クラスの作成)
・対象のシステムで、どのようなデータが必要かを洗い出す
・洗い出されたデータをグループ化する ⇒ クラスの抽出
・カプセル化
・オブジェクト(クラス)の内部データに、不当なアクセスをさせないための手段
・不当なアクセスを許すと、内部データがおかしくなったり、プログラムの構造がおかしくなったりする
・例.貿易関係のシステムで、商品の価格を円で設定するようになっているが、内部データでは変換してドルで持っているような場合、それを知らない人が内部データに円で設定してしまう。
注、継承とボリモフィズムについては別途解説
■ オブジェクト指向とは何か - 1
・クラスは設計図
・オブジェクトは製品
・設計図を元に製品を作る
・一つの設計図を元に、製品をいくつも作ることができる
■ オブジェクト指向とは何か - 2
・オブジェクトとは?
・コンピュータシステム内の処理の対象
・書籍管理の書籍や著者や出版社、人事管理の社員や部門や資格、在庫管理の商品や発注先など
・システムの動作
・システム内では複数のオブジェクトが連携しあいながら処理を進める
・人事システムでは、社員や部門や資格などのオブジェクトが連携しあう
・社員オブジェクトは実際の社員の数だけ存在する、他も同じ
・クラス - オブジェクトの設計図
・それぞれのオブジェクトには、いわば設計図があり、それをクラスと言う
・実行時に新しいオブジェクトが必要になった時点でクラスを元にオブジェクトが作成される
・例えば、新しい社員が入社した時に、社員クラスから社員オブジェクト化作成される
・クラスには、次のものが記述される
・オブジェクトがどのようなデータを持っているのか?
社員オブジェクトは給与のデータを持っている
・オブジェクトには、どのような操作が許されるのか?
この操作によって内部のデータを取得したり、設定したりできる
社員オブジェクトは給与を増やす操作を持っている
・データのことをプロパティやフィールドと言う
・操作のことをメソッドと言う
・システムの構築
・オブジェクト指向によるプログラミングとは、「クラスを設計、作成すること」である
・プロジェクトでは、最初にどのようなクラスが必要なのか洗い出すことが行われる
・それにもとづいてクラスごとにプログラミングが行われる
■ オブジェクト指向とは何か - 3
・組織内での分業と役割分担のようなもの
・組織内では、いろいろ役割を持った人が、分業して仕事をしている
・自分の役割以外のことはしない
・自分の役割以外のことを実行する場合には、他の人に依頼する
・役割がクラス
・その役割の個人がオブジェクト
■ 蛇足ないし補足
・インスタンスとオブジェクト
・クラスが設計図であり、クラスを元に作成されたものがインスタンス
・インスタンスのことをオブジェクトともいう
・しかしオブジェクトと言った場合は、若干意味が曖昧
・メソッドとメッセージ
・オブジェクト同士の連携をメッセージと言うが、これはメソッド呼び出しと同じ
・smalltalkで、メッセージと言っていたため
・メッセージと言う言葉にこだわる人もいるが、同じものである
・継承、オーバーライドとボリモフィズム
・継承
・クラスを元に別のクラスを作成すること
・ある製品の設計図を元に、別の製品の設計図を作成するようなもの
・継承する理由は、同じ処理を二重に実装しないため
・元のクラスを基底クラス(親クラス)、作成したクラスを派生クラス(子クラス)と言う
・例
・社員クラスを定義した、これを基底クラスとして、管理職クラス、一般社員クラス、契約社員クラスを派生クラスとして定義
・社員共通の処理は、社員クラスにのみ記述される
・オーバーライド
・継承で受け継いだメソッドを変更することができる
・すなわち基底クラスの動作を変更することができる
・例
・給与の計算方式が違うので、それぞれ給与計算メソッドをオーバーライドする
・ボリモフィズム
・継承されたクラスがあり、それぞれがあるメソッドをオーバーライドしている
・当該メソッドを呼び出したとき、それらの動作が異なることを言う
・呼び出し側は、動作が異なることを意識する必要はない
■ 演習問題 - クラスの作成
・クラス設計の演習問題
・DBのことは考えない
・まずクラスを抽出、メソッドのことは最初は考えない
○自動販売機(を模擬するシステム)
○オークションサイト
○図書貸出管理システム
○クリーニング店システム
○乗用車(を模擬するシステム)
○会議室予約システム
○人事管理
○大学授業
○商品受注と在庫管理
■ 参考資料
オブジェクト指向プログラミング
http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
オブジェクト指向できていますか?
http://www.slideshare.net/MoriharuOhzu/ss-14083300
オブジェクト指向
http://www.aerith.net/design/object-j.html
Javaのオブジェクト指向入門
http://www.kab-studio.biz/Programing/OOPinJava/
オブジェクト指向の基本概念
https://www.ogis-ri.co.jp/otc/hiroba/technical/concept.html