オブジェクト指向の特徴といわれているもの
1. カプセル化(encapsulation)
- オブジェクトが不必要な情報を外に漏らすことはバグの原因となりうる
- オブジェクト指向プログラミングではオブジェクトが本来外に漏らすべきではない内部の詳細について公開できないような言語機能を用いて隠蔽し、逆に必要な情報だけを公開するカプセル化を行う
- パッケージ、スコープ、インターフェースなどの言語機能がこれを実現する助けになる
- 必要/不必要の判断は人間がプログラミングの際に行うことになるので、あくまで人間が判断する必要がある
2. 継承(inheritance)
- オブジェクトがあるオブジェクトの性質を内包している場合に、共通の性質を親子の関係にできる構造化や言語機能
- 多重の継承構造がもたらす複雑さは逆に問題を引き起こすため、継承の代わりに移譲の構造をとったほうがよいとも言われることもある(Effective Java とか GoF の一部のデザインパターンとか)
- 個人的に使ったほうが現実的に便利な場合は使うけど、複雑さがまさる場面では使わないようにしている
- iOS でいえば ViewController のベースクラスとかは継承を利用したほうがスッキリしている気がします
3. 多態性(polymorphism)
- ある名前の機能が扱う対象によって振る舞いを変える性質だと認識している
- パラメトリック多相: おわゆるジェネリクス
- アドホック多相: いわゆるオーバーロード
- サブタイピング: インターフェースや継承
また、実装がコンパイル時/実行時に選択されるかにより静的/動的ポリモルフィズムに分類できる
Pinned Articles
About
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです
Tags
JavaScript
PowerShell
kibana
elasticsearch
fluentd
nginx
イベント
五十嵐裕美
村川梨衣
logrotate
IoT
Scala
Java
C言語
iputils
ICMP
WUG
mastodon
Swift
AWS
Clock
Windows
アーキテクチャ
PoEAA
iOS
DeviceFarm
プログラミング言語
OS
StepFunctions
Lambda
Serverless
terraform
ポエム
RHEL
ネットワーク
GraphQL
CloudWatch
Linux
Coreutils
network
nc
telnet
LinuxKernel
fpinscala
ELB
IAM
AppSync
EFS
Gradle
english