---
title: pi-13. カプセル化、MVCモデル、オブジェクトのマッピング
tags:  #プログラミング #java #カプセル化 #mvcモデル #オブジェクトのマッピング  
author: [kunihikokaneko](https://convert.docswell.com/user/6674398749)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/5D7Y4QY6EM.jpg?width=480
description: Java の基本 URL: https://www.kkaneko.jp/cc/pi/index.html
published: January 05, 22
canonical: https://convert.docswell.com/s/6674398749/KEL365-2022-01-05-172558
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/5D7Y4QY6EM.jpg)

pi-13. カプセル化、MVCモデル、
オブジェクトのマッピング
（Java の基本）
URL: https://www.kkaneko.jp/cc/pi/index.html
金子邦彦
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/2VENYKR1J8.jpg)

アウトライン
番号
項目
説明時間の
目安
13-1
13-2
カプセル化
MVC モデル
9分
13-3
Java での MVC モデル
9分
13-4
MVC モデルの応用
4分
13-5
オブジェクトのマッピング
7分
13-6
Java でのオブジェクトのマッピング
9分
6分
各自、資料を読み返したり、課題に取り組んだりも行う
この授業では、Java を用いて基礎を学び、マスターする
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/GY79PVMYE3.jpg)

今回の内容
• カプセル化
Java では、public, private の指定により，属性やメ
ソッドへのアクセス制御を行う
• MVC
「モデル」、「ビュー」、「コントローラー」のこ
と
• マッピング
Java のオブジェクトを、データベースや DOM オ
ブジェクトにマッピングできる
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/5G78DPLK7D.jpg)

j13-1. カプセル化
Java を基礎から学びた
い人へ（入門者向け）
金子邦彦
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/ML7LM1LPJR.jpg)

カプセル化とは
• オブジェクトは、属性と、メソッドを持つ
• 必要な属性とメソッドのみ、他のオブジェクトに
公開する
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/54EMYWM2EW.jpg)

クラス
• クラスは，同じ種類のオブジェクトの集まりと考
えることができる
人間
学生
学生でもあり人間でもある
人間だが、学生ではない
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/ZPER9YV5J9.jpg)

ソースコード
・クラス定義
・オブジェクト生成など
プログラムの起動
オブジェクトが生成され、互いに連携
しながら動作する
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/NP7XQGZXEX.jpg)

クラスB
クラスB
クラスA
クラスC
すべてのオブジェクトはカプセル化されている。
• 必要な属性とメソッドのみ、他のオブジェク
トに公開する
• 何を公開し、何を公開しないかは、クラス単
位で指定可能
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/637K94897D.jpg)

Java でのカプセル化
• 公開
public
• 非公開
private
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4LJ3WL29J5.jpg)

まとめ
• カプセル化
Java では、public, private の指定により，属性やメ
ソッドへのアクセス制御を行う
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/V8JDKNZ8EG.jpg)

j13-2. MVC モデル
Java を基礎から学びた
い人へ（入門者向け）
金子邦彦
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/4VEPK5DW78.jpg)

モデルとビューとコントローラ
モデル
更新
ビュー
ユーザに見せる
データの保持
更新
表示
ユーザ操作
受け付け、
モデル更新
コントローラ
ユーザから受け付ける
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/L27VVP197Q.jpg)

モデルとビューとコントローラ
• オブジェクト指向では、
アプリ（Webアプリなど）は、
さまざまなオブジェクトの集まり
• モデル、ビュー、コントローラーに分けて、
プログラムを設計、製作、テストすることで、
プログラムを見通し良く作成可能
（私の見解）
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/Z5JGLP247L.jpg)

MVC の例
名簿を作るとき
モデルの例
• Person クラス： オブジェクトは１人の人間
• Meibo クラス： オブジェクトは名簿全体
ビューの例
表やフォーム形式で、名簿データを表示
コントローラーの例
フォーム記入内容をもとに、モデルを更新
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/V47QY2PREP.jpg)

j13-3. Java での
MVC モデル
Java を基礎から学びた
い人へ（入門者向け）
金子邦彦
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/DKE4WLYQJ1.jpg)

今から行うこと
• モデル部分： Person クラス，Meibo クラス
• コントローラー部分：
Main クラス
※ ビューは考えないことにする
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/PL71YL6LJG.jpg)

オンライン開発環境 GDBonline
• プログラミングを行える Web サービス
https://www.onlinegdb.com
• ウェブブラウザを使う
• たくさんの言語を扱うことができる
Python3, Java, C/C++, C#, JavaScript, R,
アセンブリ言語，SQL など
オンラインなので、「秘密にしたいプログラム」を
扱うには十分な注意が必要
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/8G7WGVWQE2.jpg)

Online GDB で Java を動かす手順
① ウェブブラウザを起動する
② 次の URL を開く
https://www.onlinegdb.com
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/W4JZL453E3.jpg)

③ 「Language」のところで，「Java」を選ぶ
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/KYE6W39ZEV.jpg)

実行ボタン
エディタ画面
プログラムを
書き換えること
ができる
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/5GE5MLN9E4.jpg)

① プログラム （モデル部分）
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/V9729L55JR.jpg)

プログラムの続き（モデル部分）
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/5DJY4QK67M.jpg)

プログラムの続き（コントローラー部分）
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/2V7NYKZ1E8.jpg)

④ 実行し結果を確認
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/GYJ9PVZY73.jpg)

次に行うこと
• モデル部分： Person クラス，Meibo クラス
• コントローラー部分：
• ビュー部分：
Main クラス
View クラス（新しく追加）
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/5GJ8DP1KJD.jpg)

次のプログラムを書き加える
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/MLJLM1QPER.jpg)

次のように書き換える（ビューを使うように）
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/547MYW127W.jpg)

実行し結果を確認
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/ZP7R9YL5E9.jpg)

モデルとビューの分離
• モデルの中のデータを，全て見せる必要がない（す
べてを見せたくない）場合などに有効となる考え方
• 「プログラムが作成しやすくなる」（私の見解）
例）「『表示にこだわりたい』という場合，
モデルとビューを分離しておけば，
ビューのプログラムに集中できる」
という考え方も
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/NPJXQGWX7X.jpg)

j13-4. MVC モデルの
応用
Java を基礎から学びた
い人へ（入門者向け）
金子邦彦
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/63JK94V9JD.jpg)

• フレームワーク：アプリケーションの土台となる
ソフトウエア
• MVC モデルに適する Java 言語フレームワークも
多数ある
Struts
JSF (Java Server Faces)
Spring Framework
Java の標準機能外であるが、インストールは簡単
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/4LE3WLM9E5.jpg)

Struts 2
https://struts.apache.org/getting-started/hello-worldusing-struts2.html
• Web アプリケー
ションのワーク
• HTML, Java の組
み合わせでアプリ
ケーションを作成
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/V8EDKN687G.jpg)

j13-5. オブジェクトの
マッピング
Java を基礎から学びた
い人へ（入門者向け）
金子邦彦
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/4V7PK5YWJ8.jpg)

マッピング
モデル
データベース
データベースシステム内
マッピング
DOM
オブジェクト
ビュー
ユーザに見せる
コント
ローラ
ユーザから受け付ける
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/L2JVVPG9JQ.jpg)

情報システムのアーキテクチャ
ネットワーク接続
サーバ
（コンピュータ）
データのやり取り
データベース
プログラム配信
DOMオブジェクトと
のマッピング
データベースとの
マッピング
デジタルデバイス
・画面表示
・画面，マウス，
キーボードでの操作
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/Z5EGLP84JL.jpg)

オブジェクトのマッピングを行う理由
① データベースとのマッピング
Java オブジェクトを，データベース（リレーショ
ナルデータベースシステム内）にマッピング
リレーショナルデータベースのデータ検索結
果などを Java で簡単に扱えるように
② DOM オブジェクトとのマッピング
Java オブジェクトを，DOMオブジェクト（Web ブ
ラウザと相性が良い）にマッピング
Web プログラムのダイナミック化
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/V4JQY29R7P.jpg)

マッピングのための技術
• Java 言語
① データベース向け： SQL Alchemy など
② DOM 向け：DOM, SAX など（いずれも Java の標
準）
• Python 言語
① データベース向け： SQLAlchemy など
② DOM 向け：dom パッケージなど
37


# Page. 38

![Page Image](https://bcdn.docswell.com/page/DK74WLXQE1.jpg)

j13-6. Java でのオブ
ジェクトのマッピング
Java を基礎から学びた
い人へ（入門者向け）
金子邦彦
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/PLJ1YLNLEG.jpg)

トピックス
• リレーショナルデータベースとのマッピング
• XML, HTML, DOM
• DOM オブジェクトとのマッピング
39


# Page. 40

![Page Image](https://bcdn.docswell.com/page/8GJWGV4Q72.jpg)

Spring JDBC のマッピングの例
Java
オブジェクト
マッピングを
行う Java プログラム
リレーショナル
データベースの
テーブル
Spring JDBC
のライブラリ
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/W4EZL42373.jpg)

Spring JDBC のマッピングの例
Java
オブジェクト
・リストオブジェクト
・要素は Employee オブ
ジェクト．属性は，id,
name ,salary, joined
マッピングを
行う Java プログラム
リレーショナル
データベースの
テーブル
id
name
salary
joined
List&lt;Employee&gt; employeeList = jdbcTemplate.query(
&quot;SELECT * FROM Employee&quot;,
(rs, rowNum) -&gt; {
int id = rs.getInt(&quot;id&quot;);
String name = rs.getString(&quot;name&quot;);
BigDecimal salary = rs.getBigDecimal(&quot;salary&quot;);
LocalDate joined = rs.getDate(&quot;joined&quot;).toLocalDate();
return new Employee(id, name, salary, joined); } );
・テーブルを丸ごと読み込んで Java のリストオブジェクト化
・「SELECT ・・・」のところには条件を指定可能
※ 記事をアップしています https://www.kkaneko.jp/pro/jdbc/springjdbc.html
41


# Page. 42

![Page Image](https://bcdn.docswell.com/page/KY76W3VZ7V.jpg)

XMLとは
• XML とは eXtensible Markup Language のこと
• タグ，属性を使い文書を書く
&lt;items&gt;
&lt;item id=&quot;001&quot;&gt;XX&lt;/item&gt;
&lt;item id=&quot;002&quot;&gt;YY&lt;/item&gt;
&lt;/items&gt;
item, items はタグ
id は属性
42


# Page. 43

![Page Image](https://bcdn.docswell.com/page/5G75MLD974.jpg)

DOMとは
• DOM とは Document Object Model のこと
• DOM では，ノードが階層構造をなすと考える
items ノード
itemノード
itemノード
DOM 化
&lt;items&gt;
&lt;item id=&quot;001&quot;&gt;XX&lt;/item&gt;
&lt;item id=&quot;002&quot;&gt;YY&lt;/item&gt;
&lt;/items&gt;
item, items はタグ
id は属性
43


# Page. 44

![Page Image](https://bcdn.docswell.com/page/V9J29L85ER.jpg)

HTMLをプログラムで扱う理由
• Webブラウザでの表示をダイナミックに変えたい
とき，プログラムを書く
• そのとき，DOM オブジェクトを使うのは良い方針
44


# Page. 45

![Page Image](https://bcdn.docswell.com/page/5DEY4Q66JM.jpg)

HTML も DOM に準拠しつつある
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
&lt;meta content=&quot;text/html; charset=utf-8&quot;
http-equiv=&quot;Content-Type&quot;&gt;
&lt;meta content=&quot;width=device-width, initialscale=1.0, maximum-scale=1.0, minimumscale=1.0&quot; name=&quot;viewport&quot;&gt;
&lt;title&gt;サンプル&lt;/title&gt;
&lt;/head&gt;
&lt;/body&gt;
Web ブラウザで表示
&lt;h1&gt;サンプル&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
HTML ファイル
45


# Page. 46

![Page Image](https://bcdn.docswell.com/page/2VJNY21178.jpg)

DOM でのマッピングの例 (Java 言語)
DOM
オブジェクト
Java
DOMオブジェクトの
読み出し，書き込み
を行うプログラム
JDBC の標準ラ
イブラリ
&lt;items&gt;
&lt;item id=&quot;ID&quot;&gt;VALUE&lt;/item&gt;
&lt;/items&gt;
書き込まれた
DOMオブジェ
クト
Document d = new XMLDocument();
Element r = document.createElement(&quot;items&quot;);
d.appendChild(r);
Element e = d.createElement(&quot;item&quot;);
r.appendChild(e);
Text t = d.createTextNode(&quot;VALUE&quot;);
e.appendChild(t);
e.setAttribute(&quot;id&quot;, &quot;ID&quot;);
書き込みの例
46


# Page. 47

![Page Image](https://bcdn.docswell.com/page/GYE9P15YJ3.jpg)

DOM でのマッピングの例 (Python 言語)
Python
DOM
オブジェクト
DOMオブジェクトの
読み出し，書き込み
を行うプログラム
&lt;items&gt;
&lt;item id=&quot;001&quot;&gt;XX&lt;/item&gt;
&lt;item id=&quot;002&quot;&gt;YY&lt;/item&gt;
&lt;/items&gt;
import xml.etree.ElementTree as ET
all = ET.Element(&#039;items&#039;)
x = ET.SubElement(all, &#039;item&#039;, {&#039;id&#039;:&#039;001&#039;})
x.text = &#039;XX&#039;
y = ET.SubElement(all, &#039;item&#039;, {&#039;id&#039;:&#039;002&#039;})
y.text = ‘YY&#039;
ET.dump(all)
書き込みの例
47


# Page. 48

![Page Image](https://bcdn.docswell.com/page/5GE8D4YKED.jpg)

まとめ
• リレーショナルデータベースや、DOMオブジェク
トは、Java オブジェクトへのマッピング可能
• リレーショナルデータベースや、DOMオブジェク
トを、ふつうの Java オブジェクトと同じ感覚で
扱える
48


# Page. 49

![Page Image](https://bcdn.docswell.com/page/MLELM64P7R.jpg)

13-1
import java.util.*;
class Circle {
double x;
double y;
double r;
String color;
public Circle(double x, double y, double r, String color) {
this.x = x;
this.y = y;
this.r = r;
this.color = color;
}
public void printout() {
System.out.printf(&quot;%f %f %f %s\n&quot;, this.x, this.y, this.r, this.color);
}
}
public class Main {
public static void main(String[] args) throws Exception {
Circle x = new Circle(2, 4, 3, &quot;green&quot;);
Circle y = new Circle(8, 10, 1, &quot;blue&quot;);
x.printout();
y.printout();
}
}
49


# Page. 50

![Page Image](https://bcdn.docswell.com/page/54JMY5K2JW.jpg)

13-3
import java.util.HashMap;
import java.util.Iterator;
import java.util.ArrayList;
class Person {
String name;
String address;
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public void printout() {
System.out.printf(&quot;%s %s\n&quot;, this.name, this.address);
}
}
class Meibo {
HashMap&lt;Integer, Person&gt; m;
public Meibo(HashMap&lt;Integer, Person&gt; m) {
this.m = m;
}
public void add(int id, String name, String address) {
m.put(id, new Person(name, address));
}
public void printout() {
for(Integer i : this.m.keySet()) {
System.out.printf(&quot;%d, &quot;, i);
this.m.get(i).printout();
}
}
}
public class Main {
public static void main(String[] args) throws Exception {
HashMap&lt;Integer, Person&gt; m = new HashMap&lt;Integer, Person&gt;();
Meibo a = new Meibo(m);
a.add(1, &quot;XX&quot;, &quot;Fukuyama&quot;);
a.add(2, &quot;YY&quot;, &quot;Okayama&quot;);
a.printout();
}
}
50


# Page. 51

![Page Image](https://bcdn.docswell.com/page/ZPJR93X579.jpg)

13-3
import jav a.util.HashMap;
import jav a.util.Iterator;
import jav a.util.Array List;
class Person {
String name;
String address;
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public v oid printout() {
Sy stem.out.printf(&quot;%s %s\n&quot;, this.name, this.address);
}
}
class Meibo {
HashMap&lt;Integer, Person&gt; m;
public Meibo(HashMap&lt;Integer, Person&gt; m) {
this.m = m;
}
public v oid add(int id, String name, String address) {
m.put(id, new Person(name, address));
}
public v oid printout() {
f or(Integer i : this.m.key Set()) {
Sy stem.out.printf(&quot;%d, &quot;, i);
this.m.get(i).printout();
}
}
}
class View {
Array List&lt;Person&gt; v ;
public View() {
}
public v oid update(Meibo meibo) {
this.v = new Array List&lt;Person&gt;();
f or(Integer i: meibo.m.key Set()) {
v .add(meibo.m.get(i));
}
}
public v oid printout() {
f or(Person p: this.v ) {
Sy stem.out.printf(&quot;%s %s\n&quot;, p.name, p.address);
}
}
}
public class Main {
public static v oid main(String[] args) throws Exception {
HashMap&lt;Integer, Person&gt; m = new HashMap&lt;Integer, Person&gt;();
Meibo a = new Meibo(m);
a.add(1, &quot;XX&quot;, &quot;Fukuy ama&quot;);
a.add(2, &quot;Y Y &quot;, &quot;Okay ama&quot;);
View v = new View();
v .update(a);
v .printout();
}
}
51


