オブジェクト指向

本物のページはこちら→object-oriented

oop-1.png

オブジェクト指向プログラミングは、プログラミングのテクニックであり、
一連の問題を解決する優れたプログラムを書くためのパラダイムである。

オブジェクト指向は安全性拡張性において優れているが、
パフォーマンスににおいて劣っている場合があります。
使用は要注意

オブジェクト指向言語が作られた目的

Cのような構造化プログラミングの欠点を補うためである。

  1. グローバル変数を使わずに済ませる仕組みが備わっている
  2. 共通サブルーチン以外の再利用を可能にする仕組みが備わっている。

[2]より。

  1. 既存のコードを流用することによって開発の効率を高めること[4]

オブジェクト指向の三大要素

ポリモーフィズムと継承はコードの重複を排除して汎用性の高い部品を作る仕組み。

プログラムの手順のコツ

最初は単純に直接的に書いて、機能をまとめたりするのは後が良い。
どんなふうな単位で機能をまとめるべきかは、作ってからわかることだから。

手順

  1. 最初はベタ書きする。順番に書く。
  2. その後、機能ごとにメソッド化してまとめる。
  3. その後クラス化する。
  4. いきなり親クラスは作らないで、まずは同じ名前のメソッドを持つ別々のクラスを作っておく。
  5. 似たような機能をもつクラスについて、共通の親クラスを作って各々サブクラス化する。
  6. その後最適化する。(高速化できるところはないか?)

オブジェクト志向はじめるなら?

  • まずは宣言をインタフェースに、定義を具象クラスにすることから始める。

Effective Java 第2版によれば「項目51 インタフェースでオブジェクトを参照する」である。

Map<String> mMap=new TreeMap<String>();

これには明確な利点がある。
もし、あとでやっぱりHashMapにしよう、となったときに、片方だけ書き換えればokになるのだ
右側がFactoryの場合でも都合がよい。
そしたら、引数をインタフェースにしなきゃならなくなるので、自然と引数がインタフェースになる。
次は
  • 戻り値をインタフェースにして、実際に返す値は具象クラスにする

言語とオブジェクト指向

名詞 クラスやオブジェクト
動詞 メンバ関数、関数、(クラス)
形容詞 抽象基底クラス

オブジェクト指向用語一覧

List of pages tagged with object-oriented:

疑問

最初から複雑なプログラムを作ることなんてない。だけど、後でどんどん複雑になっていったときのために、オブジェクト指向にしておきたい、という場合、どのような手順で進めるべき?
今の私の考えは

  1. 最初は具体的なクラスを作る
  2. 複数のクラスになにか共通点があったら基底クラスを作る

この、基底クラスを作るとき、インタフェースにする意味がわからない。なんでデータ含んじゃダメなの?あとで探すのが大変だから?

参考文献

oop-1.png

オブジェクト指向プログラミングは、プログラミングのテクニックであり、
一連の問題を解決する優れたプログラムを書くためのパラダイムである。

オブジェクト指向は安全性拡張性において優れているが、
パフォーマンスににおいて劣っている場合があります。
使用は要注意

オブジェクト指向言語が作られた目的

Cのような構造化プログラミングの欠点を補うためである。

  1. グローバル変数を使わずに済ませる仕組みが備わっている
  2. 共通サブルーチン以外の再利用を可能にする仕組みが備わっている。

[2]より。

  1. 既存のコードを流用することによって開発の効率を高めること[4]

オブジェクト指向の三大要素

ポリモーフィズムと継承はコードの重複を排除して汎用性の高い部品を作る仕組み。

プログラムの手順のコツ

最初は単純に直接的に書いて、機能をまとめたりするのは後が良い。
どんなふうな単位で機能をまとめるべきかは、作ってからわかることだから。

手順

  1. 最初はベタ書きする。順番に書く。
  2. その後、機能ごとにメソッド化してまとめる。
  3. その後クラス化する。
  4. いきなり親クラスは作らないで、まずは同じ名前のメソッドを持つ別々のクラスを作っておく。
  5. 似たような機能をもつクラスについて、共通の親クラスを作って各々サブクラス化する。
  6. その後最適化する。(高速化できるところはないか?)

オブジェクト志向はじめるなら?

  • まずは宣言をインタフェースに、定義を具象クラスにすることから始める。

Effective Java 第2版によれば「項目51 インタフェースでオブジェクトを参照する」である。

Map<String> mMap=new TreeMap<String>();

これには明確な利点がある。
もし、あとでやっぱりHashMapにしよう、となったときに、片方だけ書き換えればokになるのだ
右側がFactoryの場合でも都合がよい。
そしたら、引数をインタフェースにしなきゃならなくなるので、自然と引数がインタフェースになる。
次は
  • 戻り値をインタフェースにして、実際に返す値は具象クラスにする

言語とオブジェクト指向

名詞 クラスやオブジェクト
動詞 メンバ関数、関数、(クラス)
形容詞 抽象基底クラス

オブジェクト指向用語一覧

List of pages tagged with object-oriented:

疑問

最初から複雑なプログラムを作ることなんてない。だけど、後でどんどん複雑になっていったときのために、オブジェクト指向にしておきたい、という場合、どのような手順で進めるべき?
今の私の考えは

  1. 最初は具体的なクラスを作る
  2. 複数のクラスになにか共通点があったら基底クラスを作る

この、基底クラスを作るとき、インタフェースにする意味がわからない。なんでデータ含んじゃダメなの?あとで探すのが大変だから?

参考文献

[[bibliography]]

bjane
C++ Programming Language
hirasawa
オブジェクト指向でなぜつくるのか
scot
Effective C++
web
抽象クラスとインターフェイスを理解する
headfirstjava
Head First Java 第2版 ―頭とからだで覚えるJavaの基本
effectivejava
Effective Java 第2版

[[/bibliography]]

サポートサイト Wikidot.com