Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
2025-03-26 社内勉強会 オブジェクト指向入門 第二部 / Introduction ...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kentaro Abe
March 26, 2025
Programming
71
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2025-03-26 社内勉強会 オブジェクト指向入門 第二部 / Introduction to Object-Oriented Part2
Kentaro Abe
March 26, 2025
More Decks by Kentaro Abe
See All by Kentaro Abe
2025-08-27 社内勉強会 ソフトウェアテストの基礎 / Basics of Software Testing
abekem
0
58
2025-08-06 社内勉強会 Gitを知る頃 / When You First Know Git
abekem
0
81
2025-07-02 社内勉強会 SQLに親しむ / Getting to Know SQL
abekem
0
87
2025-05-28 社内勉強会 SOLID原則ではじめるよりよい設計の第一歩 / The First Step to Better Software Design with SOLID Principles
abekem
0
140
2025-04-23 社内勉強会 デザインパターン概論 / Overview of Design Patterns
abekem
0
94
SAP Event Meshで始めるイベント・ドリブン・アーキテクチャ / Getting Started with Event-Driven Architecture Using SAP Event Mesh
abekem
0
270
2025-02-27 社内勉強会 オブジェクト指向入門 / Introduction to Object-Oriented
abekem
0
120
Other Decks in Programming
See All in Programming
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.4k
No More NoSuchMethodError
exoego
1
120
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
400
sbt 2.0: takeoff
eed3si9n
0
190
8年前のNode.jsを動かして分かった、npm installの裏側
keisukeikeda
0
130
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
350
Getting Started with Vibe Coding
miccheng
0
180
Seven New Principles of Software Engineering
yegor256
0
430
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
320
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
200
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
230
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
170
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
So, you think you're a good person
axbom
PRO
2
2.2k
The agentic SEO stack - context over prompts
schlessera
0
990
Site-Speed That Sticks
csswizardry
13
1.6k
How STYLIGHT went responsive
nonsquared
100
6.3k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
670
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
780
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
It's Worth the Effort
3n
188
29k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
The SEO identity crisis: Don't let AI make you average
varn
0
620
Transcript
第二部 継承とポリモーフィズム 2025/03/26 社内勉強会 オブジェクト指向入門 1
2 • サンプルプログラムはJavaで書いています ◦ 言語によらない内容なのでJavaを知らなくても大丈夫 • 説明のために簡略化している場合があります 前置き
3 • オブジェクト指向ってなに? • 面倒だから/難しいから使いたくない という人に • オブジェクト指向の良さを知ってもらう • クラスを使って実装したくなってもらう
ことを目指す 想定読者とねらい
4 はじめに
5 1. クラス(カプセル化) 2. 継承 3. ポリモーフィズム オブジェクト指向の三大要素
1. クラス(カプセル化) 2. 継承 3. ポリモーフィズム 6 オブジェクト指向 の三大要素 関連するデータとロジックをまとめる
オブジェクト指向は バグを減らすための考え方
例えばこんなかんじ: Moneyクラス 7 金額を表すデータ 金額データを扱う ロジック
これだけ覚えて帰ってください 8 simple, small
9 1. クラス(カプセル化) 2. 継承 3. ポリモーフィズム オブジェクト指向の三大要素 今回はこちらについて話します
10 • 保守しやすいコードを書くために大事な概念 • 実務でもよく登場する設計パターン なぜこの話をするのか?
11 • 保守しやすいコードを書くために大事な概念 • 実務でもよく登場する設計パターン なぜこの話をするのか? • 理解しやすい • 変更しやすい
• テストしやすい
12 複雑な条件分岐 こんな経験ないですか?
13 複雑な条件分岐 なぜ条件分岐なんてものが存在するのか? こんな経験ないですか?
14 なぜ条件分岐なんてものが 存在するのか?
15 なぜ条件分岐なんてものが 存在するのか? 基本的に同じだけどちょっとだけ違う
あるある • 区分によって処理を変えたい • 条件に当てはまるデータだけ 処理したい 16 なぜ条件分岐なんてものが 存在するのか? 基本的に同じ
だけどちょっとだけ違う
17 基本的に同じだけど ちょっとだけ違う 今回のキーワード
18 継承 ポリモーフィズム 基本的に同じだけどちょっとだけ違うものをうまく扱う
19 継承 Inheritance
20 親クラスの機能を子クラスが引き継ぐ仕組み 継承とは? クラス 機能
21 親クラスの機能を子クラスが引き継ぐ仕組み 継承とは? 犬は「吠える」「走る」だけでなく 「食べる」「眠る」もできる (動物の機能を引き継ぐ) クラス 機能
22 継承の実装例
23 継承の実装例
24 • 共通処理の再利用 • コードの重複削減 継承のうれしさ
25 継承を使わない場合 コードの重複
26 継承を使う場合 共通処理は親クラスに 切り出して再利用 子クラスには差分を記述
27 共通化・重複削減だけを 目的に継承するのは危険 ただし
28 • 親クラスを変更すると子クラスの振る舞いも変わる ◦ 関連の薄い親子は思わぬバグが発生する ◦ 親クラスが子クラスのことを気にし始めるとよくない • 継承を繰り返すと階層が深くなっていく ◦
階層が深くなるほど保守性が下がる ◦ ソースコードを読みづらい、変更が大変 継承の乱用は危険
29 1. 「一種である(is-a)」関係 2. リスコフの置換原則(SOLID原則の”L”) 継承をうまく扱うガイドライン
30 継承を使う場合、これを満たすことを絶対に確認するべき • 犬は動物の一種である(dog is-a animal) 「一種である( is-a)」関係 動物 犬
ヒト
31 親クラスを子クラスに置き換えても問題なく動作しなければならない リスコフの置換原則 原文はけっこう難しいので意訳
32 親クラスを子クラスに置き換えても問題なく動作しなければならない リスコフの置換原則 原文はけっこう難しいので意訳 ハトは飛べるが、ペンギンは飛べない →リスコフの置換原則に違反🙅
33 基本的に同じ だけど ちょっとだけ違う 継承
34 ポリモーフィズム Polymorphism 多態性
35 同じメソッドで、オブジェクトごとに振る舞いが違うこと ポリモーフィズムとは? 同じ「食べる」でも ヒトの「食べる」と 犬の「食べる」は異なる
36 ポリモーフィズムの実装例 オーバーライド: 親クラスのメソッドを上書きする
37 ポリモーフィズムの実装例
38 ポリモーフィズムの実装例
子クラスは親クラスの機能を引き継ぐ =子クラスは親クラスとして扱える 39 ポリモーフィズムの真髄
40 ポリモーフィズムの真髄 犬クラスは動物クラスとして扱える
41 ポリモーフィズムの真髄 犬クラスは動物クラスとして扱える 同じ動物クラス なのに、 振る舞いが異なる !
42 1. if文やswitch文などの条件分岐を減らせる 2. コードの再利用性が高まる 3. 新しい機能追加が簡単 ポリモーフィズムのうれしさ
43 1. if文やswitch文などの条件分岐を減らせる 引数にヒトクラスを渡すのか、 犬クラスを渡すのかで処理が変わる ポリモーフィズムなし ポリモーフィズムあり
44 2. コードの再利用性が高まる 🙅ヒトクラスと犬クラスに対して 個別に実装する 🙆動物クラスに対して実装する →ヒトクラスと犬クラスで再利用できる ポリモーフィズムなし ポリモーフィズムあり
猫クラスを追加する場合 45 3. 新しい機能追加が簡単 動物クラスを使う側の実装や、 ヒトクラスと犬クラスの実装を変える必要がない
46 親クラスで定義されていないメソッドは使えない ポリモーフィズムの注意点 ヒトクラスと犬クラスをまとめて 動物クラスとして扱うための制約
基本的に同じ だけど ちょっとだけ違う 47 ポリモーフィズム
48 そうは言っても 実務でどう使うんですか?
49 ケース1:コントローラーの共通処理 ケース2:通知方法の切り替え 継承・ポリモーフィズムの簡単なユースケース
50 ケース1:コントローラーの共通処理 認証やログなどの共通処理を親クラスに切 り出し、子クラスで再利用する
51 ケース2:通知方法の切り替え メール通知とSlack通知をまとめて、条 件分岐せずに処理を切り替える
52 1. 継承について最近のトレンド 2. インターフェース 補足
53 継承は使い所が難しく、設計が複雑になる より柔軟な設計「コンポジション (委譲)」 • 「機能を持つ(has-a)」関係 • 継承よりも先にこちらを検討する 補足:1. 継承について最近のトレンド
54 • UserControllerは認証機能とログ機能を持つ コンポジション 「機能を持つ( has-a)」関係 継承
55 インターフェースで定義された機能を実装クラスに持たせる仕組み こちらも、継承より先に検討するべき方法 補足:2. インターフェース
56 補足:2. インターフェース インターフェースを実装する 使い方は継承とほぼ変わらない
57 1. 複数のインターフェースを実装できる 2. 「暗黙の実装」がない インターフェースの利点
58 1. 複数のインターフェースを実装できる ペンギンは飛べないので、 Flyableインターフェースを実装しなければよい
59 2. 「暗黙の実装」がない 親クラスの実装を上書きしない選 択も可能 →👿暗黙の実装 実装クラスでは実装が強制される →👼暗黙の実装なし 継承 インターフェース
• 基本的に同じだけどちょっとだけ違うものをうまく扱う • 継承:共通処理の再利用 • ポリモーフィズム:柔軟な振る舞いの切り替え • うまく使って保守しやすいコードを書こう! ◦ ただし、継承を使う場合はよく検討しましょう
◦ コンポジションとインターフェースで実現できるとベター 60 まとめ
61 • SOLID原則 • デザインパターン • ドメイン駆動設計 次に学ぶとよいもの(プログラミング関連)
62 • 具体と抽象 次に学ぶとよいもの(プログラミング以外) https://speakerdeck.com/soudai/a bstraction-and-concretization
63 参考文献