オブジェクト指向(プログラミング)
プログラミングの基本。しっかりとした土台があってこそ、高みをめざすことができる!
【プログラミングに欠かせないオブジェクト指向】
◆オブジェクト指向の黎明期
「オブジェクト指向(object-oriented)」という言葉を最初に提唱したのは、Smalltalkというオブジェクト指向環境を発明したアラン・ケイ氏だと言われています。パーソナルコンピュータの生みの親です。
◆オブジェクト指向とは?(ここ重要です)
「ある役割を持ったモノ」ごとにクラス(プログラム全体の設計図)を分割し、モノとモノとの関係性を定義していくことでシステムを作り上げようとするシステム構成の考え方のこと。
・オブジェクト:直訳すれば「物」「対象」という意味。プログラミングにおいてはデータと処理の集まりを意味している。
・クラス:データと処理をひとつにまとめる機能。モノ(オブジェクト)の設計書のようなもの。
通常の変数はデータだけを持っています。(例えば、数値や文字列など)
これに対してクラスは、データのみではなく「メソッド」と呼ばれるデータの操作方法やその他のツールを持っています。
・プロパティ:モノ(オブジェクト)が持っているデータのこと。(車に例えれば「メーカー」「排気量」「色」など)
・メソッド:モノ(オブジェクト)が持っている処理のこと。(車に例えれば「走る」「曲がる」「止まる」などアクションを起こす処理のこと)
オブジェクト指向言語は、オブジェクトのメソッドを呼び出すという形でオブジェクト間で情報交換をしています。
クラスの中で定義された「関数」のことをメソッドと言います。前でも説明したように作ったモノ(オブジェクト)に対して命令をする文のことです。
メソッドは関数です。メソッドが存在することで引数によって計算結果が変わるなど同じクラスから生まれたものでも、異なった結果を生み出せるようになります。
◆具体例(イメージとして理解!)
ゲームを作成する場合、たくさんの人が関わり、開発をしています。
1000車種から選べるレーシングゲームを開発しているチームがあるとします。
「Aボタンで前進」、「Bボタンで停止」というプログラムをしました。開発途中「Cボダンでバック」の機能を追加しようとしたとき、1000種類の車に対して変更をするよりも、「車」というモノを予め作成しておき、そのモノを変更する方が開発のスピード、情報管理やメンテナンスをするときに非常に便利になります。このことはプログラムの保護(カプセル化)にもつながります。
そして、ここまで作成してきたクラス(抽象的)から実体を作り出すことを「インスタンス(具体化)」と呼びます。
【オブジェクト指向の三原則】
◆継承=同じようなプログラムを1か所にまとめてコードを再利用しやすくする仕組み
似たようなオブジェクトを複数作る時に、全てのプロパティやメソッドをいちいちプログラミングするのは非常に手間がかかりますが、継承を使うことにより、同じ機能を実装できます。
ゲーム作成に例えると、「車」に「トラック」も追加しようとした場合。基本操作は同じため追加も簡単にできるのです。
◆カプセル化=他のプログラムからできるだけ変更できない仕組み
オブジェクトが持つデータや処理のうち、別のオブジェクトから直接利用される必要のないものを隠すことを言い、利用する場合は外部から操作するために作られた処理を設けることを言います。
◆ポリモーフィズム=継承したコードの一部を変更して利用するための仕組み
クラスによって同一のメソッドで異なる処理が行えるという性質をいいます。
世の中の家電は説明書を見なくてもだいたい使い方がわかりますよね。
車においてもアクセルが右というふうに決まっています。
プログラムも同じ処理の名前で動いてくれると、処理名を覚える必要もないし、ミスも減らすことが出来るのです。
【オブジェクト指向の主なプログラミング言語】
◆C言語
C言語は「型」に支配された言語です。変数にも関数にも「型」が存在し、「型」という枠組みの中で厳密に情報が処理されています。
C言語はクッキー型のような形を決めるためのものであり、「データ型」とは、C言語における変数や関数の形を決めるためのものです。
このデータ型によって「情報のサイズ」や「情報の種類」を決めています。
◆C++
C言語が拡張されたプログラミング言語。C言語では構造体(データをパッケージ化する機能)、関数(データを処理する機能)がそれぞれ別の機能として存在していたが、C++の「クラス」は構造体メンバ(クラスが管理するデータのこと)に関数も含ませることができるようになりました。
◆Python(パイソン)
プログラミング言語の1つ。覚えやすく、初心者でも使いやすいためAI(人工知能)の開発、Webアプリの開発、スマホアプリの開発、ゲーム開発などに使用されています。「YouTube、インスタグラム、Googleマップ」もPythonで作られています。もっとも将来性のある言語と言えるでしょう。
◆Ruby(ルビー)
日本人が作成したプログラミング言語。コードの量が少ないので初心者も扱いやすい。主にWEBアプリ制作に使用。
◆Scratch(スクラッチ)
プログラミング教材。コードは使用せず、積み木のように用意されたブロックを組み立てていく。入力が苦手な子供もプログラミングができる。
【オブジェクト指向のメリット】
◆オブジェクト指向のメリット
・効率よくプログラムを設計・開発できる
・不具合の原因を特定しやすくなる
・プログラムの仕様が変わっても簡単に対応できる
【オブジェクト指向を身につけるためには、キーワードや概念を正確に理解することが肝になる】
オブジェクト指向では、キーワードや概念が多く用いられています。開発エンジニアには正確な理解が求められます。
正確にキーワードを理解をするためには、実践で経験を積み重ねていくことが必要です。そのことで、キーワードや概念について、頭と体で理解することができると思います。
このレベルまで理解することができれば、オブジェクト指向のメリットを享受し、プログラミングのスキルを数段階あげることが可能になります。
以上