キュアセブン考えます

考えたこと,学んだことを書きます

プログラミングⅢ

プログラミングⅢ

プログラミングⅢの授業では、以下の3点を目標に掲げている

 

(1)オブジェクト指向の概論

 

プログラミング言語とその歴史について

 コンピュータの初登場は1946年のEINACで配線によって物理的にプログラムするものであった。
 つづいて1949年EDSACは機械語アセンブリ語でメモリに覚えさせる型のものになった。
  • 機械語・・・CPUが直接理解し実行できる言語

機械は電圧が高いか低いかの状態しかないため2進数の羅列になる

当時の技術者というのは機械語をわかる人のことである

Aレジスタに数値3を格納せよ は MOVI A,3 (move immediate*1によるブロック構造化

構造化プログラミングの考え方が広まる
  • 構造化プログラミング・・順次・分岐・繰り返しの3つの制御構造だけをつかって、プログラムを段階的に細かな単位に分割していく記述方法*2

1972年 C・・・・・低水準向け、元来UNIX開発用*3、手続き型で基本要素は手続き

    Smalltalk・・オブジェクト指向の考え方の発展

C言語の普及

1983年 C++・・・・C言語オブジェクト指向を導入

GUIの普及
  • GUI・・グラフィカルインターフェース。画面にウィンドが出てきたりして一般人に使いやすくなった。画面にプログラムをくっつけていくイメージ

1991年 Visual Basic・・ビジュアルプログラミングの考え方

1995年 Java・・・・・代表的なオブジェクト指向言語、基本要素はオブジェクト。

 

オブジェクト指向

世界はものであふれている。ものに囲まれて生きている。より現実世界に近い形でプログラミングをおこなおうと考えられた。システムの中にモノが様々に入っており、つながりを持っている。*4ブジェクト指向のプログラミングといえば、モノをプログラムし、組み合わせる技法のこと。モノごとがそれぞれに異なる処理をする。同じメッセージを送ってもモノが違えば処理は変わる*5。現実世界の物もそうであり、いたって自然な考え方である。モノはグループにして整理したりものごとに分けたりできる。

 オブジェクト指向でプログラムしようと思うと、

  1. 物の分析*6
  2. 物を作る(設計)
  3. プログラミング(関係づけ)

の段階を踏むべきだ。

 Javaの普及でオブジェクト指向が広まったので、「モノ(オブジェクト)」の売り買いが行われる。部品として開発され、ソースが売られる。プログラミングする際、部品を買い集めてくれば簡単に素敵なプロジェクトが完成するだろう。企業規模になると自分で開発する場合もある。オブジェクト指向にすることで、プログラミングがスムーズになった。

 

クラスとインスタンス

  • クラス・・オブジェクトの仕様のこと(型)

特徴として

  • 1つクラスがあればたくさんのインスタンスを生産できる
  • グループ化できる*7
  • インスタンス・・オブジェクトの実態のこと(型を使ってできたモノ)

 

オブジェクト指向プログラミングの基本機能

  • カプセル化・・・データと操作をひとまとめにすること。変更がカンタン
  • 継承・・・・拡張*8前のクラスのデータやメソッドが拡張後のクラスに受け継がれる(影響しているクラスも同時に変更できる)。差分開発が可能(足りないところだけ付け加える)*9
  • ポリモーフィズム・・オブジェクトによって、同名のメソッドの動作を変えることができる。(ものによって解釈が変わる)。(オーバーライド・・継承したメソッドの動作を上書きできる)

*1:直接)))であり分からなくもない。アセンブリ言語は電子計算機という授業で学習していく。

以降、様々なプログラミング言語が登場する。

1960年 COBOL・・事務処理向け

1960年 LISP・・・人工知能関数型言語で基本要素は関数(メソッド)。

1964年 BASIC

1967年 Simula・・オブジェクト指向の考え方を初めて取り入れた言語

1969年 Pascal・・教育用

人間に理解しやすいプログラミング原語の開発が始まる。

1957年 FORTRAN・・化学技術計算向け

1958年 ALGOL58・・入れ子(({}

*2:Cでコーディングした時この形をとったほうが見やすいとわかった

*3:OSを開発するんだったら低水準言語を使うべきでソフトの開発は高水準でやってもいいんじゃないかと思った

*4:メッセージパッシング

*5:後述のポリモーフィズム

*6:どんなインフラがあるか?など

*7:学校のクラス分けと同じ意味でのクラス

*8:あるクラスをもとにして別のクラスをつくること。

*9:コミット?