ãªããžã§ã¯ãæåããã°ã©ãã³ã°ãšã¯
ãªããžã§ã¯ãæåãã©ãã€ã ã«ãããããã°ã©ãã³ã°.
OOPã®æ§è³ª
- ðã«ãã»ã«å(Encapsulation)
- ðç¶æ¿(Inheritance)
- ðå§è²(Delegation)
- ðããªã¢ãŒãã£ãºã
ðãªããžã§ã¯ãæåèšèª
çŸåšãªããžã§ã¯ãæåèšèªãšåŒã°ããŠãããã®ã¯å®éã«ã¯,
- Abstruct Data Type (Java Integer å)
- ãªããžã§ã¯ã (Java Object å)
ã® 2 ã€ãåãããã£ãŠãã. ãã®æå³ã§, ãªããžã§ã¯ãæåèšèªãšèšãããã¯æœè±¡ããŒã¿èšèªãšããã»ããæ£ãã(å³å¯ãªOOPãšããããã¯ãã«ããã©ãã€ã ).
ð¥OOP Basics
ðã¯ã©ã¹(OOP)
OOPã«ãããæœè±¡ããŒã¿å(ADT)ãããªãããŒã¿æ§é .
ã¡ãœãããšå±æ§ãå®çŸ©ããç¹å¥ãªã·ã³ã¿ãã¯ã¹ã ã¯ã©ã¹(Class) ãšãã. å€ãšæäœãã²ãšã€ã®ãŸãšãŸããšãããã®. 以äžã®æ§æèŠçŽ ããã€.
- å€: Explicite State(æç€ºçç¶æ .. æéãšãšãã«å€åããå€).
- æäœ: Procedural Data Abstruction(æç¶çããŒã¿æœè±¡).
Class ãšããæŠå¿µã«ãã£ãŠ, ãªããžã§ã¯ãã®â宣èšâãšâçæ (new)âãåé¢ãã.
ã¯ã©ã¹ã¯, ç¶æ¿ã»ããªã¢ãŒãã£ãºã ã»ã«ãã»ã«åãªã©ã®, ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã«ãããéèŠãªæŠå¿µãå®çŸãã匷åãªææ®µ.
ðãªããžã§ã¯ã(Object)
OOPã«ãããðããŒã¿æœè±¡(Data Abstruction)ã®å®äœ.
ãã®å®äœãšããæŠå¿µãå°ããããã«ããã, åã¿ç ããšããã¯å ·äœçã«ã¯, ã¡ã¢ãªäžã®ããŒã¿ããã, èå¥åã«ãã£ãŠã¢ã¯ã»ã¹ã§ãã. ããããã¢ã¯ã»ã¹ã§ããããŒã¿ãåé¡ããŠã°ã«ãŒãåããŠãããã®.
- ðŠãªããžã§ã¯ããšã¯ããç®çããã£ãã¢ãã®éå
- ãªããžã§ã¯ã (ããã°ã©ãã³ã°) - Wikipedia
ðã€ã³ã¹ã¿ã³ã¹(Instance)
ðã¯ã©ã¹(Class)ããçæããðãªããžã§ã¯ã(Object)ãã€ã³ã¹ã¿ã³ã¹ãšãã.
ãªããžã§ã¯ãã¯äžã€ã®ã¡ãœããã§, ç°ãªã屿§ããã€è€æ°ã®ãªããžã§ã¯ããçæã§ãã. ãã®èœåãInstantiation (ã€ã³ã¹ã¿ã³ã¹å) ãšãã.
ã€ã³ã¹ã¿ã³ã¹ - Wikipedia
ã¡ãœãããšå±æ§(Methods/Attributes)
ãªããžã§ã¯ãã¯å éšãšå€éšã¯ã€ã³ã¿ãã§ãŒã¹ãéããŠãããšãããã.
å éšã®æç€ºçç¶æ ã Attributes (屿§), ã€ã³ã¿ãã§ãŒã¹ã Methods (ã¡ãœãã) ãšãã.
ããšãã°, A1 ã屿§, M1 ãã¡ãœãããšãã.
declare
local
A1={NewCell 0}
in
proc {M1 Hoge} end
end
ããã¯ã¯ã©ã¹ã§ãã€ã³ã¹ã¿ã³ã¹ã§ããªãããšã«æ³šæ!!
ðã¡ãœãã(methods)
ããã¯ã©ã¹ãªãããªããžã§ã¯ãã«æå±ãããµãã«ãŒãã³. ð颿°.
ref: ã¡ãœãã (èšç®æ©ç§åŠ) - Wikipedia
åãªããžã§ã¯ããæã£ãŠããèªèº«ã«å¯Ÿããæäœ. ãªããžã§ã¯ãã¯ãããŒã¿ããšãæç¶ããããæã£ãŠããã, ãã®ãæç¶ããã®éšåã«åœãã.
ðã¡ãœãããã§ãŒã³
åäžã®æã§åäžãªããžã§ã¯ãã®è€æ°ã®ã¡ãœããåŒåºããå¯èœã«ãã䟿å©ãªä»çµã¿.
ãªããžã§ã¯ãã«ããããŠãããèšæ³ã§ã€ãªãã§ããããšãããã.
ð屿§(Attributes)
ãªããžã§ã¯ãå éšã®æç€ºçç¶æ ã Attributes ãšãã.
ðProcedure Dispatch
ãªããžã§ã¯ãã¯åäžãªãšã³ããªãã€ã³ãããã€. (ãšã³ããªãã€ã³ã = åŒã³åºãå£) ãšã³ããªãã€ã³ãã«æž¡ãããåŒæ°ãã¡ãã»ãŒãžãšãã. äžã®äŸã ãš, Counter ããšã³ããªãã€ã³ã. ãšã³ããªãã€ã³ãã« inc,get ã¡ãã»ãŒãžãéã.
{Counter inc}
{Counter get (X)}
ãšã³ããªãã€ã³ããã, ã¡ãã»ãŒãžã«å¯Ÿå¿ããããã·ãŒãžã£ãåŒã³ã ããã.
ã¡ãã»ãŒãžãšããã·ãŒãžã£ã¯ããããã Dispatch (ãã³ããªã³ã°) ãããŠãã.
OOP Concepts
ðã«ãã»ã«å(Encapsulation)
ããã°ã©ã ãšå éšãšå éšãã€ã³ã¿ãã§ãŒã¹ã§åããããš. ã«ãã»ã«åã®ã¡ãªããã¯å€§èŠæš¡éçºãã·ã³ãã«ã«ãã.
- æ£ãããä¿èšŒãã.
- è€éããè§£æ¶ãã.
ã«ãã»ã«åãšã¯ãããããã®ãé èœããããš
ã«ãã»ã«åãããŒã¿é èœãšããã®ã¯ç矩ã®å®çŸ©.
ã«ãã»ã«åãšã¯ãããããã®ãé èœããããš.
- ããŒã¿
- ã¡ãœãã
- å®è£
- 掟çã¯ã©ã¹
- èšèšã®è©³çް
- å®äœåã®èŠå
- å
æµåçèŠçŽ ãæ¢ãåºããŠã«ãã»ã«åãã
ããªã¢ãŒãã£ãºã
åèŠçŽ (宿°, 倿°, åŒ, ãªããžã§ã¯ã, 颿°, ã¡ãœãããªã©) ã«ã€ããŠããããè€æ°ã®åã«å±ããããšãèš±ããšããæ§è³ª. ããªã¢ãŒãã£ãºã ã¯ãªããžã§ã¯ãæååºæã®æŠå¿µã§ã¯ãªã.
詳现ã¯ãã£ã¡: ðããªã¢ãŒãã£ãºã
ðç¶æ¿(Inheritance)
ç¶æ¿. ãããªããžã§ã¯ããä»ã®ãªããžã§ã¯ãã®ç¹æ§ãåŒãç¶ãããš.
ç¶æ¿ã¯åã«ç¹æ®åãšåå©çšãå®çŸããææ®µã§ã¯ãªã. ãªããžã§ã¯ããåé¡ããããã®ææ®µã§ãã.
ã©ãåé¡ããã? 2ã€ã®åãå£ããã.
- å ±éæ§: æããã£ãŠãå€ãããªããã®ãæœè±¡ã¯ã©ã¹ã«
- å¯å€æ§: æµåçèŠçŽ ãå ·è±¡ã¯ã©ã¹ã«.
ã¯ã©ã¹ã®éåããã€ãã¹ãŠã®è²¬åãçã£åœããããã«ã€ã³ã¿ãã§ãŒã¹ãçšæãã.
æ©èœè¿œå ãšæ©èœå®è£ ã®éã
- ãæ©èœè¿œå ã (ã¹ãŒããŒã¯ã©ã¹ãæã£ãŠããªãæ©èœããµãã¯ã©ã¹ã§è¿œå ) ãç®çãšãããã®
- ãæ©èœå®è£ ã (ã¹ãŒããŒã¯ã©ã¹ã§å®çŸ©ããã€ã³ã¿ãã§ãŒã¹ããµãã¯ã©ã¹ã§å®è£ ) ãç®çãšãããã®
ref: :Bridge ãã¿ãŒã³ - ãã¶ã€ã³ãã¿ãŒã³å ¥é - IT å°ç§
ðå€éç¶æ¿
è€æ°ã®ã¯ã©ã¹ããç¶æ¿ããããš. 芪ã¯ã©ã¹ã«åäžã®ã¡ãœããããã£ãŠãããç¶æ¿ããæ, åã¯ã©ã¹ã¯ã©ããããšããåé¡ããã. ãã°ãã°OOPã®è°è«ã«ãªãè«ç¹.
ðãªãŒããŒã©ã€ã(override)
ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã«ãããŠãªãŒããŒã©ã€ã (override) ãšã¯, ã¹ãŒããŒã¯ã©ã¹ã§å®çŸ©ãããã¡ãœããããµãã¯ã©ã¹ã§å®çŸ©ããªãã, åäœãäžæžãããããš.
ref. ãªãŒããŒã©ã€ã - Wikipedia
âãªãŒããŒã©ã€ã vs ãªãŒããŒããŒã
ãªãŒããŒã©ã€ã: override vs Overload: ãªãŒããŒããŒã
äž¡è ã¯ã¿ã€ãã³æ··åãããã. ãšãã«Javaã§åããããªããªã¢ãŒãã£ãºã ã®å®çŸæ¹æ³ãšããŠç»å Žããã®ã§.
ãªãŒããŒã©ã€ãã¯ç¶æ¿ã«çŽã¥ãæŠå¿µã§ãã, ããã«ããã°ãªããžã§ã¯ãæåã«é¢ãã. ãªãŒããŒã©ã€ã㯠ã¢ãããã¯å€çžã®ãªããžã§ã¯ãæåã«ãããå®çŸæ¹æ³ã®åŒã³å.
Related
ðå§è²(Delegation)
å§è²(Delegation). ãããªããžã§ã¯ãã®æäœãäžéšä»ã®ãªããžã§ã¯ãã«ä»£æ¿ãããææ³.
- å§è²ãè¡ããªããžã§ã¯ãã¯å§è²å ãªããžã§ã¯ããžã®åç §ãæã€
- å¿ èŠã«å¿ããŠãã®åç §ãåãæ¿ããäºã§åäœã«ããªãšãŒã·ã§ã³ãæãããäºãã§ãã.
- ãã©ã°ã€ã³æ©æ§
ref: å§è² - Wikipedia
ðã€ã³ã¿ãã§ãŒã¹(Interface)
ã³ã³ããžã·ã§ã³ | Composition
æ°ããªã¯ã©ã¹ã«, æ¢åã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãä¿æãã.
has-a ã®é¢ä¿ (not is-a)
Prefer Composition over inheritance (Effective Java).
ã³ã³ããžã·ã§ã³ãšç§»è²ã®æ¯èŒ
å§è²ã®å®çŸã«ã¯å€ãã®å Žåã³ã³ããžã·ã§ã³ã䜿çšãã. å§è²ã¯ãç®çãã§ãã, ã³ã³ããžã·ã§ã³ã¯ãã®ãææ®µã.
ref: ã³ã³ããžã·ã§ã³ãšããªã²ãŒã·ã§ã³ - ãšããæè¡ã¡ã¢ããã°
é¢é£ãã Design Pattern
- Adapter
- Proxy
- Facade
- State
- Strategy
- Decorator
ðMixin
ä»ã®ã¯ã©ã¹ãã䜿çšãããã¡ãœãã矀ãæã€ã¯ã©ã¹ããä»ã®ã¯ã©ã¹ã®ã¹ãŒããŒã¯ã©ã¹ã«ãªããªãã§æžãããã®ãç¹å¥ãªå€éç¶æ¿é¢ä¿ãå®çŸããããã®ã¡ã«ããºã .
ref. Mixin - Wikipedia
Related
OOP Topics
ðã·ãªã¢ã«å(çŽåå/Serialized)
ã·ãªã¢ã©ã€ãº(Serialized). 察矩èªã¯ãã·ãªã¢ã©ã€ãº(Deserialized). ãããã¯ãŒã¯éä¿¡ãªã©ã®ããã«, ãããªããžã§ã¯ãããã€ãåãæååã«å€æããããš.
䞊åããã°ã©ãã³ã°ã«ãããð鿬¡åãã·ãªã¢ã©ã€ãºãšåŒã°ããã®ã§æ³šæ.
ðç¶æ¿ããå§è²
å¯èœãªéããæœè±¡ã¯ã©ã¹ã®ç¶æ¿ã¯é¿ãããã€ã³ã¿ãŒãã§ãŒã¹ã»å§è²ãç©æ¥µçã«äœ¿ãããã©ãããŠãç¶æ¿ã䜿ããªããæ éã«èšèšãããã
ãªããªãã°ãç¶æ¿ã®å Žåã¯èŠªã¯ã©ã¹ã®ä¿®æ£ã§åã¯ã©ã¹ã®ä¿®æ£ãå¿ èŠã«ãªããã.
OOPã®æåãªã¹ããŒã¬ã³.
- ç¶æ¿ããå§è²
- ç¶æ¿ããã€ã³ã¿ãã§ãŒã¹
- Abstractã¯ã©ã¹ãããã€ã³ã¿ãã§ãŒã¹
- ðšDecorator Pattern
- éçŽã§ã¯ãªããŠã³ã³ããžã·ã§ã³
- ç¶æ¿ã§ã¯ãªããŠã³ã³ããžã·ã§ã³
å§è²ãããç¶æ¿ã®å Žå
is-aé¢ä¿ã綺éºã«å®çŸ©ã§ããå Žå.
ãç¶æ¿ããå§è²ãâ ãç¶æ¿äœ¿ããªã - ãããã®æµ·ã®çé ã§
âç¶æ¿ãšå§è²ã®æ¯èŒ
ã¡ãªãã
- Java ã®å Žåç¶æ¿ã¯äžã¯ã©ã¹ããã§ããªãã, å§è²ãªãè€æ°å¯èœ.
- ç¶æ¿ãªã芪ã¯ã©ã¹ã®ã¡ãœãããå šãŠå ¬éãããŠããŸããå§è²ãªãå¿ èŠãªãã®ã ãå ¬éã§ãã.
ãã¡ãªãã
- ç¶æ¿ã«æ¯ã¹ãŠã³ãŒãã®èšè¿°éãå€ããªã.
- ç¶æ¿ã¯äœãæžããªããã°èŠªã¯ã©ã¹ã®æ©èœã䜿ãã.
- å§è²ã¯ã¡ãœããã®åŒã³åºããå®è£ ããªããŠã¯ãªããªã.
ref: ãªããžã§ã¯ãæåã§. ç¶æ¿ã®ä»ã«, å§è²ãšãã®ãåºãŠããŸãã. ããã¯å ·
æœè±¡ã¯ã©ã¹ãããã€ã³ã¿ãã§ãŒã¹ãéžã¶(Effective Java)
ref: Effective Java (p93). æœè±¡ã¯ã©ã¹ãããã€ã³ã¿ãã§ãŒã¹ãéžã¶
å®è£ ã®èгç¹ã§ã¯,
- æœè±¡ã¯ã©ã¹ã¯ã¡ãœããã«å¯Ÿããå®è£ ãå«ãããšãèš±ãããŠãã.
- ã€ã³ã¿ãã§ãŒã¹ã¯ã¡ãœããã«å¯Ÿããå®è£ ãå«ãããšãèš±ãããŠããªã.
æ©èœã®èгç¹ã§ã¯,
- æœè±¡ã¯ã©ã¹ã¯ããæ©èœã®å®è£ ã匷å¶ãã.
- ã€ã³ã¿ãã§ãŒã¹ã¯ä»»æã®æ©èœãæ··ãåããã.
éå±€åã®èгç¹ã§ã¯,
- æœè±¡ã¯ã©ã¹ã¯ç©äºãéå±€åããããšã«åªãã.
- ã€ã³ã¿ãã§ãŒã¹ã¯éå±€ãæããªããã®ããŸãšããããšã«åªãã.
ã€ã³ã¿ãã§ãŒã¹ã¯, éå±€ãæããªãåã·ã¹ãã ãæ§ç¯ãã.
- ã€ã³ã¿ãã§ãŒã¹ã¯åãå®çŸ©ããããã«å©çšãã
- ã€ã³ã¿ãã§ãŒã¹ã¯å®æ°ãæäŸããããã«äœ¿çšããªã
- Enum ãæ€èšãã
- Util ã¯ã©ã¹ãæ€èšãã
- é¢é£ããã¯ã©ã¹ã®ã¡ã³ããæ€èšãã
ðŠJava ã€ã³ã¿ãã§ãŒã¹ã¯éå±€ãæããªãåã·ã¹ãã
âæç¶ãåãšãªããžã§ã¯ãæåã®éã
ref: ðæç¶ãåããã°ã©ãã³ã°
æ©èœåè§£
ããåé¡ãå°ããªæ©èœã«ãã¬ãŒã¯ããŠã³ããããšã§, ãã®åé¡ãæ§æããæ©èœèŠçŽ ã®æŽãåºããããããšãæ©èœåè§£ãšåŒã¶.
æ§é åããã°ã©ãã³ã°çã¢ãããŒã
(æç¶ãçãª) æ©èœãé©åãªé åºã§åŒã³åºããã¡ã€ã³ãããã°ã©ã ãå¿ èŠã«ãªã.
ã¡ã€ã³ããã°ã©ã ã«ã¯ãã¹ãŠãæ£ããåäœããã, ããªãã¡æ©èœã®çµã¿åãããšåŒã³åºãé åºãå¶åŸ¡ããããŸãã«å€§ããªè²¬ä»»ã課ãããã.
çµæçã«ãœãŒã¹ã³ãŒãã¯è€éã«ãªã.
ãªããžã§ã¯ãæåçã¢ãããŒã
éšåæ©èœã«å¯ŸããŠããèªäœã®æ¯èãã«é¢ãã責任ãæãã, å®è¡æç€ºãè¡ãã ãã§ããšä»»ããŠãã. ãããå§è² (delegation) ãšããèãæ¹.
ðŠã¯ã©ã¹ãšã¯å±æ§ã®éåãšã¡ãœããã®éåã®ãã¢ããŒã¿æ§é
ã¯ã©ã¹ãšã¯, Pair (attrs[屿§ã®éå] : methods[ã¡ãœããã®éå]))ãšããããŒã¿æ§é .
屿§ãšã¡ãœããã¯ã¬ã³ãŒãããŒã¿æ§é ã«ãã£ãŠç®¡çãããŠããã ãã§ãã!
Lisprãªãã°, â((attr1 attr2) (method1 method2)).
Java ãªãã°, ãããããŠããã.
HashMap<String, HashSet<String>> attrs = new HashMap<String, HashSet<String>>();
HashMap<String, HashSet<String>> methods = new HashMap<String, HashSet<String>>();
attrs.put ("Hoge", new HashSet (Arrays.asList ("attr1", "attr2")));
methods.put ("Hoge", new HashSet (Arrays.asList ("method1", "method2")));
References
ãã®ãããããèšäº.æŽå²ã端çã«ãŸãšãŸã£ãŠãã.
-
ãã ã« Hoge ã€ã³ã¿ãã§ãŒã¹ãš HogeImpl ã¯ã©ã¹ããã£ãã, ãã ã« new ããã ãã® create ã¡ãœããããã£ãã, ã©ãã§å€ãèšå®ãããŠããããããªããªããžã§ã¯ããã²ããŸããããŠãã, ãœãŒã¹ã³ãŒãã远ãã«ããããããã«ãã£ãŠããšããæããªã, ãªããžã§ã¯ãæåãªã³ãŒããããç®ã«ãã.
ã¯ã©ã¹ã¯åã«ãŠãŒã¶ãŒå®çŸ©åã§ãã, ç¶æ¿ã¯éšååãšå·®åããã°ã©ãã³ã°ãå®çŸããä»çµã¿ã ãšãšãããã®ããã. ãªããžã§ã¯ããã¡ãã»ãŒãžãéããããšãã¡ã«ãã³ã®äžçã«ã¯å ¥ãã, æ©èœã ãèããã®ããã.
-
ãªããžã§ã¯ãæåã¯çŠæ¢ããã¹ã - ããã ã®ã¯ãŠãª
Books
- ãªããžã§ã¯ãæåå ¥é