Carpe Diem

  Top > スポンサー広告> オブジェクト指向 > オブジェクト指向の勉強その4  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

オブジェクト指向の勉強その4

2012 - 01/09 [Mon] - 01:32

次は「オブジェクト指向でなぜつくるのか」という本を読んで.これもイメージをつかむ上ですごく分かりやすかった.最初に挙げたサイトで土台を作って,この本でコンクリート塗りたくって固めた感じ

「オブジェクト指向プログラミング」は「インスタンス中心にプログラムを作る」

「問題の切り分けがしやすくなる」「クラス単位のテストが簡単にできる」「クラスの使い回しができる」といったメリット

インタフェースは中身のない抽象メソッドを書く.abstract付けなくてもいい

抽象クラスは普通のメソッドも実は書ける.その場合は中身を書いていい.
abstractのついた抽象メソッドは中身書いたらダメ.

だから共通部は普通のメソッドを書いて,個別でオーバーライドが必要な部分は
abstractで宣言すればいい

ポリモーフィズムはメッセージ(メソッドの呼び出し)の送り方を共通にする.

継承は共通点を相違点を体系的に分類して整理する.共通点はスーパークラス

OOPは
①グローバル変数問題
②貧弱な再利用性(サブルーチンしかない)
の問題を解決するために生まれた.


クラスは
①サブルーチンと変数を「まとめる」
②クラスの内部だけで使う変数やサブルーチンを「隠す」
③1つのクラスからインスタンスを「たくさん作る」

①まとめることのメリット
・部品の数が減る(10個作れば1桁減る)
・メソッドの名前づけが楽になる(クラス内で重複さえしなければいいから)
・メソッドが探しやすくなる

②隠すメリット
グローバル変数を使わずにプログラムを書くことが可能になる.
どちらかというとプログラム作成→他で使わない部分があったらprivateにしてアクセスを避ける
って流れのほうが自然に見える.最初から「これは使わないからprivate」って分かる?

③たくさん作る
従来のプログラミング言語では実現が難しい部分.OOP特有の機能.
従来なら配列などを使って必要なだけ変数領域を用意する必要があった.
同種の情報を複数同時に扱うケースで有用

インスタンス変数
・ローカル変数の影響範囲を局所化できるメリット
・グローバル変数の存在期間が長いメリット
のいいとこ取り.しかも変数領域の複製も手軽にできる.


共通サブルーチンは呼び出される側のロジックを1つにまとめる
ポリモーフィズムは呼び出す側のロジックを1つにまとめる→共通メインルーチンを作る仕組み.
従来共通サブルーチンはあったけど,共通メインルーチンはなかった

三大要素「クラス」「ポリモーフィズム」「継承」
クラス・・・変数とメソッドをまとめる(整理整頓.呼び出され側)
ポリモーフィズム・・・メインルーチンをまとめる.共通化する(無駄を省く.呼び出し側)
継承・・・クラスの共通部分を別クラスにまとめる.コードの重複を排除する(無駄を省く.呼び出され側)

「型」を指定する理由
・メモリ領域を有効に使うため(昔はメモリが高価だったから)
・プログラムのエラーを未然に防ぐため(今も)
OOPでは後者が進められて,クラスを型として指定できるようになった.

・パッケージ・・・ディレクトリで分類
・例外・・・今までは
①エラーコードの判定ロジックを書き忘れてもコンパイル段階でチェックされない
②エラーコードの判定ロジックが複数のサウルーチンに連鎖する→プログラムが冗長に
例外の仕組みがあると
①例外の宣言や後処理を書き忘れるとコンパイルエラーが出てくれる
②後処理の必要がないメソッドでは例外の宣言だけをしておけばいい→重複したエラー処理を1箇所にまとめることができる

・ガベージコレクション
以前は不要になったメモリ領域の開放処理が必要だった.
忘れるとメモリリークでハング
OOPなら不要なインスタンスをメモリ上から自動で削除してくれる.


メモリ
静的領域
・アプリケーション開始時に確保
・グローバル変数.実行コード
・アプリケーションでまとめて1つ

ヒープ
・開始時に一定領域が確保され,必要の都度アプリケーションに割り当てられる
・任意
・システムまたはアプリケーションで1つ

スタック
・FIFO
・呼び出したサブルーチンの引数,ローカル変数,戻り値
・スレッド毎に1つ

C++
・クラスのロードは最初で一括→実効速度が早い
Java
・クラスのロードはその都度→読み込みでオーバーヘッドがかかるけど,全体のメモリ使用量を減らせる.
ネットワーク越しで分散して管理されたプログラムファイルを実行時に結合して動かすことができる柔軟性を持つ.
静的領域の代わりにメソッドエリアと呼ぶ

インスタンス生成ではヒープ領域が使われる.有限.
参照型変数にはインスタンスのポインタ(参照,名前)が格納される.
ポインタ=インスタンスの場所を示す情報

メソッドテーブル??
メソッドが格納されている場所を示すポインタを集めたテーブル

ガベージコレクションの対象
・完全に孤立
・ヒープ領域内で循環参照
・参照はしているが,「されてはいない」インスタンス

ダンプ
ドサッと落とす.
プログラムが異常終了した時のメモリ内容をまとめてドサッと印字した結果
メソッドを呼び出すときはこのメソッドテーブルを経由して実行.メソッドエリアに作られる.

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。