第2回講義

Similar documents
PowerPoint プレゼンテーション

Microsoft PowerPoint ppt

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

GEC-Java

Prog2_12th

PowerPoint プレゼンテーション

Microsoft PowerPoint - chap10_OOP.ppt

V8.1新規機能紹介記事

PowerPoint プレゼンテーション

プログラミング基礎I(再)

JavaプログラミングⅠ

PowerPoint プレゼンテーション

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

JavaプログラミングⅠ

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint pptx

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

Java知識テスト問題

Microsoft PowerPoint ppt

JavaプログラミングⅠ

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

GEC-Java

PowerPoint Presentation

PowerPoint プレゼンテーション

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

とても使いやすい Boost の serialization

Microsoft PowerPoint - prog04.ppt

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

SpringSecurity

Java から見たオブジェクト指向入門 オブジェクト指向 AtoZ セミナー ( 株 ) 豆蔵井上樹

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

ガイダンス

PowerPoint プレゼンテーション

JavaプログラミングⅠ

JavaプログラミングⅠ

PowerPoint プレゼンテーション

Javaプログラムの実行手順

C#の基本

PowerPoint プレゼンテーション

プログラミング入門1

10K

Prog2_9th

2004/11/23 オブジェクト指向プログラミング - モデル図とシーケンス図の表現方法 - オブジェクト指向プログラミング (OOP:ObjectOrientedPrograming) オブジェクト指向プログラミング言語 (OOPL) Java,C++,Delphi(Pascal),Visual

26 editor.putint(pref_count_key, executecount); 27 // 変更した Preference を確定させる 28 editor.commit(); 29 } (c) 実行の様子実装して実行した様子を図 1 と図 2 に示す. 一度実行するごとに, カウン

Prog2_9th

Microsoft Word - Android_SQLite講座_画面800×1280

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

Microsoft Word - C言語研修 C++編 3.doc

基礎計算機演習 実習課題No6

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

メソッドのまとめ

GEC-Java

デザインパターン第一章「生成《

Microsoft PowerPoint - lec06 [互換モード]

Prog1_6th

データアダプタ概要

JavaプログラミングⅠ

JAVA入門

基本情報STEP UP演習Java対策

GUIプログラムⅣ

オブジェクト指向プログラミング・同演習 5月21日演習課題

デジタル表現論・第4回

Microsoft PowerPoint - prog09.ppt

レコードとオブジェクト

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

アスペクトの相互作用を解消するアスペクトの提案

Microsoft PowerPoint - prog09.ppt

第1章 ビジュアルプログラミング入門

Java言語 第1回

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

アクティビティ図・シーケンス図からのコード生成 機能ガイド

Java の ConcurrentHashMap における同期化 バッドケースとその対処法 2013 年 9 月湊隆行 1. はじめに表 1.1 に示すように Java の Collections Framework には 3 つの世代があります バージョン 1.0 から存在するレガシー API バ

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

実行時のメモリ構造\(2\) Javaスタック内のフレーム間動作

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

Microsoft PowerPoint ppt

Program Design (プログラム設計)

プログラミング実習I

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

スライド 1

プログラミング入門1

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

Make the Future Java FY13 PPT Template

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

人工知能入門

Prog1_10th

Microsoft PowerPoint - ep_cpp04.ppt

2

Java講座

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

プログラミング入門1

TestDesign for Web

Transcription:

オブジェクト指向概論 第 2 講 クラスとカプセル化 立命館大学 情報理工学部 黄宏軒 1

オブジェクト指向の重要な概念 n クラス q 同じようなオブジェクトを まとめて 考える n 継承 ( インヘリタンス ) q 複数のクラスの 共通部分をまとめる n ポリモーフィズム ( 多態性 ) q 呼び出す側を 共通化 する n 複雑なものを簡単に 2

2.1 クラスとは何か n 類似のオブジェクトを まとめて 考える q 個々のオブジェクトが持つ共通の特性を表わす コンピューターの共通特性 CPU:Pentium/Athlon/ 入力装置 : キーボード, マウス, 出力装置 : 画面記憶デバイス :HDD,DVD... A さんのパソコン ( デスクトップ ) B さんのパソコン (WS) H さんのパソコン ( ノート ) 3

プログラムの世界のクラス n プログラムの世界では, クラスはオブジェクトのひな型 ( 原型 ) q q オブジェクトを作るための設計図 Java ではすべてのプログラムがクラスで記述される パソコン の設計図 CPU: 入力装置 : 出力装置 : 記憶デバイス : OS: 所有者 : ログインする A さんのパソコン オブジェクト CPU:Pentium 3.2G 入力装置 : キーホ ート, 出力装置 :17 インチ液晶記憶デバイス :512MB OS:Windows XP 所有者 :A さんログインする 4

クラスとインスタンス n クラスという設計図を元に作られたオブジェクトを インスタンス という パソコンクラス CPU: 入力装置 : 出力装置 : 記憶デバイス : OS: 所有者 : ログインする CPU:Pentium 3.2G 入力装置 : キーホ ート, 出力装置 :17 インチ液晶記憶デバイス :512MB OS:Windows XP 所有者 :A さんログインする CPU:Athlon 4G CPU:Pentium M 1.2G 入力装置 : キーホ ート, 出力装置 :12 インチ液晶記憶デバイス :1GB OS:Windows XP 所有者 :H さんログインする インスタンス (A さんのパソコン ) インスタンス (B さんのパソコン ) 入力装置 : キーホ ート, 出力装置 :19 インチ液晶記憶デバイス :2GB OS:Windows XP 所有者 :B さんログインする インスタンス (H さんのパソコン ) 5

Java で記述したテレビクラス // テレビクラス public class Television { クラス名 //**** 属性 ****// private String manufacturer; private String name; private int channel; private int volume; private int size; private int weight; //**** 振舞い ****// // チャンネル変更 public void chagechannel (int channel) { this.channel = channel; // ボリューム変更 public void changevolume (int volume) { this.volume = volume; 6

インスタンスを指定して実行 // Television クラスから 2 つのインスタンスを作る tv1 = new Television(); tv2 = new Television(); // インスタンスを指定してチャネルを変更 tv1.changechannel (10); // tv1のチャンネルを10に変更 tv2.changechanel (4); // tv2のチャンネルを4に変更 インスタンスを管理するための変数などを用意する必要はない 7

クラスの作成者と利用者 n クラスという設計図をいろいろな人が使えるのがオブジェクト指向のメリットの一つ クラスの作成 ( クラスの提供者 ) オブジェクトの作成 ( クラスの利用者 ) 8

2.2 OOP の実行の仕組み n コンパイラ方式 ソースコード Int b = 1; Int C = 2; If (b > c) { a = b + c; コンパイルリンク 機械語 010001 111010 100110 001110 実行 n インタプリタ方式 ソースコード Int b = 1; Int C = 2; If (b > c) { a = b + c; 解釈 インタプリタ 実行 9

Java の実行方式 ( 中間コード方式 ) ソースコード Int b = 1; Int C = 2; If (b > c) { a = b + c; コンパイル コンパイルリンク 中間コード (bytecode) Iconst_0 Istore_0 Iload_0 Iconst_1 解釈 インタプリタ (JVM) 実行 実行効率はほどほど どのマシン /OS でも動く 10

オブジェクトの実体 n 実行時にはメモリ空間にオブジェクトの実体が作られる テレビ メーカ名製品名大きさ重さチャンネルボリューム チャンネルを変えるボリュームを変える コンパイル テレビクラス ( 実行形式 ) テレビインスタンス 1 テレビインスタンス 2 メモリ空間 ( スタティック域 ) メモリ空間 ( ヒープ域 ) テレビクラス ( ソース ) テレビインスタンス 3 11

インスタンスの詳細 n クラスで定義されたプロパティの 型 によってメモリ領域が確保される メモリ領域 テレビ メーカ名製品名大きさ重さチャンネルボリューム チャンネルを変えるボリュームを変える テレビクラス テレビインスタンスメーカ名格納場所製品名格納場所大きさ格納場所重さ格納場所チャンネル格納場所ホ リューム格納場所チャンネルを変えるメソッド * ボリュームを変えるメソッド * * メソッドはスタティック域に確保される 12

オブジェクトの作成 n オブジェクトを作成するには, オブジェクト自身のメソッドを利用する n このメソッドを コンストラクタ という n コンストラクタの役割 q q q オブジェクトの作成 属性の初期化 オブジェクトの作成に関連する初期処理 n ファイルを開くなど 13

// テレビオブジェクトを利用するクラス Television t; // インスタンス変数 Television メーカ名製品名大きさ重さチャンネルボリューム 3 インスタンス // テレビオブジェクトの作成 t = new Television(); 1 コンストラクタ呼び出し テレビオブジェクト メーカ名格納場所製品名格納場所 メモリ領域 チャンネルを変えるボリュームを変える Television( ) channel = 0; volume = 0; テレビクラス 2 変数の初期化 大きさ格納場所重さ格納場所チャンネル (0に初期化) ホ リューム (0に初期化) チャンネルを変えるメソッドボリュームを変えるメソッドコンストラクタ 14

パラメータを使ったオブジェクトの作成 // テレビクラス public class Television { // テレビクラスのコンストラクタ public Television (int size, int weight) { volume = 0; channel = 0; this.size = size; this.weight = weight; 15

パラメータを使ったオブジェクトの作成 ( 続き ) // テレビオブジェクトを使うプログラム 14 インチ, 3kg のテレビ Television t1; Television t2; Television t3; // インスタンス変数 // インスタンス変数 // インスタンス変数 // 14 インチテレビオブジェクトの作成 t1 = new Television (14, 3 ); // 17 インチテレビオブジェクトの作成 t2 = new Television (17,5 ); // 20 インチテレビオブジェクトの作成 t3 = new Television (20, 8 ); 17 インチ, 5kg のテレビ 20 インチ, 8kg のテレビ 16

オブジェクトの破棄 n オブジェクトを破棄するメソッドをデストラクタという n 破棄しなければ, メモリリークが起きる n Java などでは, プログラムで使わなくなったオブジェクトを自動的に破棄する機能を持っている. この仕組みを ガーベジコレクション という 17

インスタンスを指定して実行 // Television クラスから 2 つのインスタンスを作る tv1 = new Television(); tv2 = new Television(); // インスタンスを指定してチャネルを変更 tv1.changechannel (10); // tv1のチャンネルを10に変更 tv2.changechanel (4); // tv2のチャンネルを4に変更 インスタンスを管理するための変数などを用意する必要はない 18

メソッドのオーバーロード n 機能は同じだが呼び出し方の異なるメソッドを ( 同じ名前で ) 複数作ることができる n 実行時に適切なメソッドが選択される. これをメソッドのオーバーロードという // 顧客クラス public class Customer { // パラメータ custno で顧客情報を検索 public void getcustomer (int custno) { // パラメータ custname で顧客情報を検索 public void getcustomer (String custnname) { 19

2.3 カプセル化とは何か n オブジェクトの操作に必要な部分だけを外から見えるようにして, それ以外の部分を隠す n 余計なものを見えないようにしてわかりやすくする n 利用の仕方を制限して単純化する. 不用意のデータ操作を防ぐ n プログラムを変更するときの影響を小さくする 20

カプセル化の概念 ハンドルを操作する タイヤの向きが変わる 中がどうなっているかわからない ( 知る必要は無い ) 21

カプセル化の概念 ( 続き ) n DVD ドライブの例 22

アクセス制御 n プログラムの世界では, オブジェクトの外から ( 利用する側から ) 利用できないよう隠すもの 隠蔽 利用できるように見せるもの 公開 n 隠蔽と公開を制御 ( アクセス制御 ) するために アクセス修飾子 がある q 隠蔽 :private( 同じクラスの中からだけ利用可 ) q 公開 :public( どのクラスからも利用可 ) q 制限 :protected( 同じパッケージなら利用可 ) 23

// テレビクラス public class Television { //**** 属性 ****// private String manufacturer; private String name; private int channel; private int volume; private int size; private int weight; //**** 振舞い ****// // チャンネル変更 public void changechannel (int channel) { this.channel = channel; // ボリューム変更 public void changevolume (int volume) { this.volume = volume; private 修飾子がついているので, オブジェクトの外からは認識できない public 修飾子がついているので, オブジェクトの利用側から認識, 利用できる 24

隠蔽と公開の基準は? n プロパティ 原則隠蔽 公開してしまうと, いつどこで参照されているかを特定するのは困難 n メソッド 原則公開 もともと外部から操作するためのもの. 呼び出し方 ( パラメータ ) を変更することはまれ 25

アクセサメソッド n 外部からプロパティにアクセスするためのメソッド n ゲッター : 属性を参照するためのメソッド get+ 属性名 n セッター : 属性を変更するためのメソッド set+ 属性名 26

アクセサメソッドの例 // テレビクラス public class Television { //**** 属性 ****// private String manufacturer; private String name; private int channel; //**** 振舞い ****// // メーカ名のアクセサメソッド ( 属性を参照 ) public String getmanufacturer ( ) { return manufacturer; // 製品名のアクセサメソッド ( 属性を参照 ) public String getname ( ) { return name; // チャンネルのアクセサメソッド ( 属性を変更 ) public void setchannel (int channel) throws Exception { if ( (channel > 0) && (channel < 13) ) this.channel = channel; 入力値のチェックなどを行うこともできる else throw new Exception ( 指定されたチャネルは無効です ); 27

複雑なアクセサメソッド // 顧客クラス public class Customer { private int custno; private String name; private String address; // 顧客番号 // 顧客名 // 住所 // 顧客番号のセッター ( 属性の変更 ) public void setcustno (int custno ) { this.custno = custno; // 顧客番号のセット1 顧客番号をセット // 顧客データベースの参照 getcustomerinfo (custno) ; // 顧客データベースの参照 private void getcustomerinfo (custno) { // 他のアクセサ public String getname ( ) { return name; public String getaddress ( ) { return address; 3 顧客情報をセットしておく 2 ついでに顧客 DB にアクセスして 顧客データベース 28

複雑なアクセサメソッド ( 続き ) // 顧客管理クラス public class CustomerManager { private Customer cust; private String name; private String address; // 顧客オブジェクトの作成 cust = new Customer ( ); // 顧客番号のセット cust.setcustno (100) ; // 顧客情報の参照 name = cust.getname() ; address = cust.getaddress() ; // 顧客オブジェクト // 顧客名 // 住所 顧客番号のセットと同時に顧客 DB へのアクセスが行われる 顧客情報を参照することができる 29

まとめ n 複数のオブジェクトが持つ共通の特性 ( 属性, 振舞い ) を取り出してまとめたものを クラス という n プログラムの世界では, クラスはオブジェクトのひな型 ( 原型 ) n クラスという設計図を元に作られたオブジェクトを インスタンス という n プログラムの実行時には, メモリ空間にオブジェクト ( インスタンス ) の実体が作られる n オブジェクトを作成するには, オブジェクト自身のメソッド ( コンストラクタ ) を利用する 30

まとめ ( 続き ) n 自動的に不要になったオブジェクトを破棄してくれる仕組みを ガーベジコレクション という n オブジェクトの操作に必要な部分だけを外から見えるようにして, それ以外の部分を隠すことを カプセル化 という n 隠蔽と公開を制御するにはアクセス制御子 (private と public と protected) を用いる n 属性 ( 原則隠蔽 ) にアクセスするには アクセサメソッド を用いる. アクセサメソッドでは初期化などの処理を行うこともできる 31