オブジェクト指向プログラミング

互いに密接な関連性を持つデータとメソッドをひとつにまとめてオブジェクトとして用いるソフトウェア開発手法

: object-oriented programming, OOP

OOP[1][2]

OOPOOPOOP OOP OOP

使C++JavaPython

歴史

編集
 
UML Button xsize draw()

 object-oriented1967[3]19501960(MIT) 1960LISP atom[4][5] 1966LISP[3]

私は、オブジェクトとは、生物の細胞やネットワーク上の個々のコンピュータのようもの、そしてそれらのコミュニケーションは専らメッセージによって行なわれるもの、と考えていました (つまり、メッセージングは最初から存在していたのですが、プログラミング言語でメッセージングを実用的かつ効率的に行う方法を見つけるまでには時間がかかりました)。

アラン・ケイ, (Meaning 2003)

MIT19601961Sketchpad1963 Sketchpad "master""definition"[6] MITALGOLAED-0 "plexes"[7]

1962UNIVAC I (UNIVAC 1107) SimulaSimula[8] Simula使1965Simula[9]

SimulaALGOL60ALGOLUNIVAC ALGOL 60使Simula19651966SimulaSimula使1968 B5000URAL-161966SimulaSIMSCRIPT  (prefix) 辿 Simula[7]

1972IBM System/360IBM System/370IBMSimula 67[8]CII 10070CII Iris80Simula 671974Simula231975DECsystem-10Simula 678DECsystem-10Simula 6728 22Simula調[8]

1970Xerox (PARC)SmalltalkSmaltalk-72SmalltalkSmalltalk[10] SmalltalkSimula 67[11]

1970SmalltalkLispLispLispLispLOOPS FlavorsMixinCommon Lisp (CLOS)  1980Intel iAPX 432Linn SmartRekursiv

1981Byte Magazine8SmalltalkSmalltalk 1986ACMOOPSLA1,0001980ITTSmalltalk使Objective-CSimulaC++[10] 1985EiffelEiffelEiffelEiffel
 
TIOBE 200220182000Java C 

1990Visual FoxPro 3.0[1][12][13]C++[14]Delphi[15] GUIOOPSmalltalkCObjective-CmacOSCocoaOOPOOP  1960使 1978Modula-22Oberon[16]

AdaBASICFortranPascalCOBOL

PythonRubyJavaMicrosoft.NETC#Visual Basic .NET (VB.NET)  OOP使VB.NETC#[17]

OOPLの特徴

編集

オブジェクト指向プログラミング言語 (OOPL) では、オブジェクトを使用するが、言語仕様でOOP対応を謳っていても、関連する技術や構造のすべてが言語機能により直接サポートされているわけではない。以下に挙げる特徴は、特に言及されている例外を除いて、クラス指向やオブジェクト指向の傾向が強いとされる言語 (あるいはOOPをサポートするマルチパラダイムプログラミング言語)に共通すると考えられるものである。

非OOPLとの共通点

編集










クラスとオブジェクト

編集

オブジェクト指向プログラミング(OOP)をサポートする言語は、コードの再利用と拡張性のために、典型的には、クラスまたはプロトタイプの形で継承を使用する。クラスを使用するものは、主に二つの概念をサポートする。

クラス
与えられた型やクラスのオブジェクトのデータ形式やそれらを利用可能な手続きの定義であり、また、データや手続き (クラスメソッドとも呼ばれる)そのものを含む場合もある。つまり、クラスは、メンバーとなるデータや手続きを含むものである。
オブジェクト
クラスのインスタンス

オブジェクトは、システムが扱おうとする(多くは現実世界の)対象を表現したものである。例えば、描画アプリケーションにおける「円」・「四角」・「メニュー」などのオブジェクトや、オンラインショッピングシステムにおける「ショッピングカート」・「顧客」・「商品」などのオブジェクトがある[18]。 オブジェクトは、ファイルのオープンを表すオブジェクトや、米国慣用単位からメートル法に変換するサービスを提供するオブジェクトのように、より抽象的なエンティティを表すこともある。

オブジェクト指向プログラミングとは、単なるクラスやオブジェクトではなく、データフィールドやメソッドを含んだオブジェクト (データ構造)を中心としたプログラミングパラダイム全般のことです。クラスを使って、関係のないメソッドをまとめて整理する——これがオブジェクト指向の本質ではないことを理解しましょう。

Junade Ali, Mastering PHP Design Patterns(Ali 2016, p. 11)

 name "Mary"EmployeeOOP





















 使便

使OOP使

mixin

クラスベース対プロトタイプベース

編集

appleorange2Fruit

 fruitappleorangefruit2appleorangefruitsugar_contentapple

動的ディスパッチとメッセージパッシング

編集

  

 

カプセル化

編集

OOP

 Javaprivate使publicpublicprivateprotected  Python private 

コンポジション、継承、委譲

編集

""""  """"  "has-a" 使"""" 

("is-a-type-of")Employee  Person Person first_name  last_name  make_full_name() EmployeeEmployee position  salary [19]

mixinmixin is-a-type-of mixin使FileReaderWebPageScraperunicode_to_ascii()UnicodeConversionMixinmixin

Javafinal

Composition over inheritance使 has-a EmployeePersonEmployeePersonPersonGo

/


ポリモーフィズム

編集

  

CircleSquareShapeShapeDrawShape


オープンな再帰

編集

オープンな再帰[20]をサポートする言語では、オブジェクトのメソッドは同じオブジェクト上の他のメソッドや自分自身を呼び出すことができる。通常はthisselfと呼ばれる特別な変数やキーワードを使用して呼び出しをするのが一般的であるが、この変数は「遅延結合」であり、あるクラスで定義されたメソッドが、そのサブクラスで後から定義された別のメソッドを呼び出すことができる。

デザインパターン

編集

継承とBehavioral subtyping

編集

 is-a 使OOPL OOPL / (Behavioral subtyping)  Behavioral subtyping  使

GoFデザインパターン

編集

オブジェクト指向とデータベース

編集

OOPL  (RDBMS)   RDBMS  OOPL  RDB - [21](ORM)Visual FoxProIDEJava Data ObjectsRuby on RailsActive Record

RDBMS  RDBMS 

OOPと制御構造

編集

OOP[22] OOP[23][24][25][26]

責任駆動設計 対 データ駆動設計

編集

 Wirfs-BrockWilkerson[27]

SOLID、GRASPのガイドライン

編集

SOLIDのガイドラインは、プログラミングにおける五つの実践の頭文字をとった語呂合わせであり、マイケル・C・フェザーズ[28]が考案し提唱したものである

GRASP(General Responsibility Assignment Software Patterns)は、クレーグ・ラーマンが提唱したもう一つガイドラインである。

形式意味論

編集

脚注

編集

注釈

編集
  1. ^ 1995年6月 Visual FoxPro 3.0, FoxPro は手続き型言語からオブジェクト指向言語へと進化した。Visual FoxPro 3.0では、データベースコンテナ、シームレスなクライアント/サーバー機能、ActiveXのサポート、OLEオートメーションとヌルのサポートが導入された。Summary of Fox releases

出典

編集


(一)^ Kindler & Krivy 2011.

(二)^ Lewis & Loftus 2008, §1.6 "Object-Oriented Programming".

(三)^ abMeaning 2003.

(四)^ LISP 1 Programmers Manual 1960, p. 88f.

(五)^ LISP 1.5 Programmers Manual 1962, p. 105.

(六)^ Sutherland 1963.

(七)^ abNygaard & Dahl 1978.

(八)^ abcHolmevik 1994.

(九)^ Dahl 2004.

(十)^ abMeyer 2009.

(11)^ Kay 1993.

(12)^ FoxPro: Foxprohistory.org

(13)^ 1995Visual FoxPro 3.0 /: DFpug.de

(14)^ Khurana, Rohit (1 November 2009). Object Oriented Programming with C++, 1E. ISBN 978-81-259-2532-3. https://books.google.com/books?id=MHmqfSBTXsAC&pg=PA16 

(15)^ TECH+: Delphi20: Delphi20016202000使[1]

(16)^ Wirth, Niklaus. From Modula to Oberon and the programming language Oberon (Report). ETH Technical Reports D-INFK. Vol. Band 82. Wiley.

(17)^ |Microsoft Docs [2]

(18)^ Booch, Grady (1986). Software Engineering with Ada. Addison Wesley. p. 220. ISBN 978-0-8053-0608-8. https://en.wikiquote.org/wiki/Grady_Booch. "Perhaps the greatest strength of an object-oriented approach to development is that it offers a mechanism that captures a model of the real world." 

(19)^ Jacobsen, Ivar; Magnus Christerson; Patrik Jonsson; Gunnar Overgaard (1992). Object Oriented Software Engineering. Addison-Wesley ACM Press. pp. 4369. ISBN 978-0-201-54435-0. https://archive.org/details/objectorientedso00jaco/page/43 

(20)^ 2013185  18.10 self

(21)^ Neward, Ted (2006626). The Vietnam of Computer Science. Interoperability Happens. 200674201062

(22)^ Ambler, Scott (199811). A Realistic Look at Object-Oriented Reuse. drdobbs.com. 201074

(23)^ Shelly, Asaf (2008822). Flaws of Object Oriented Modeling. Intel Software Network. 201074

(24)^ James, Justin (2007101). Multithreading is a verb not a noun. techrepublic.com. 20071010201074

(25)^ Shelly, Asaf (2008822). HOW TO: Multicore Programming (Multiprocessing) Visual C++ Class Design Guidelines, Member Functions. support.microsoft.com. 201074

(26)^ Robert Harper (2011417). Some thoughts on teaching FP. Existential Type Blog. 2011125

(27)^ Wirfs-Brock, Rebecca; Wilkerson, Brian (1989). Object-Oriented Design: A Responsibility-Driven Approach. ACM SIGPLAN Notices 24(10): 74. doi:10.1145/74878.74885. 

(28)^ https://wiki.c2.com/?MichaelFeathers

出典

編集

Kindler, E.; Krivy, I. (2011). Object-Oriented Simulation of systems with sophisticated control. International Journal of General Systems. pp. 313343. 

Lewis, John; Loftus, William (2008). Java Software Solutions Foundations of Programming Design (6th ed.). Pearson Education Inc.. ISBN 978-0-321-53205-3 

Kay, Alan; Ram, Stefan (23 July 2003). "Dr. Alan Kay on the Meaning of "Object-Oriented Programming"". www.purl.org. 2022815

McCarthy, J.; Brayton, R.; Edwards, D.; Fox, P.; Hodes, L.; Luckham, D.; Maling, K.; Park, D. et al. (March 1960). LISP I Programmers Manual. , : Artificial Intelligence Group, en:M.I.T. Computation Center and Research Laboratory. p. 88f. 17 July 2010. https://web.archive.org/web/20100717111134/http://history.siam.org/sup/Fox_1960_LISP.pdf. "In the local M.I.T. patois, association lists [of atomic symbols] are also referred to as "property lists", and atomic symbols are sometimes called "objects"." 

McCarthy, John; Abrahams, Paul W.; Edwards, Daniel J.; Hart, swapnil d.; Levin, Michael I. (1962). LISP 1.5 Programmer's Manual. en:MIT Press. p. 105. ISBN 978-0-262-13011-0. https://archive.org/details/lisp15programmer00john/page/105. "Object  a synonym for atomic symbol" 

Sutherland, I. E. (1963130). Sketchpad: A Man-Machine Graphical Communication System. Technical Report No. 296, Lincoln Laboratory, Massachusetts Institute of Technology via Defense Technical Information Center (stinet.dtic.mil). 2019717

Ali, Junade (2016-09-28) (). Mastering PHP Design Patterns (1 ed.). Birmingham, England, UK: Packt Publishing Limited. ISBN 978-1-78588-713-0 

Nygaard, Kristen; Dahl, Ole-Johan (1978-08-01). Development of the SIMULA languages. ACM SIGPLAN Notices (Association for Computing Machinery) 13(8): 245272. doi:10.1145/960118.808391. 

Dahl, Ole Johan (2004). The Birth of Object Orientation: The Simula Languages. From Object-Orientation to Formal Methods. Lecture Notes in Computer Science. 2635. pp. 1525. doi:10.1007/978-3-540-39993-3_3. ISBN 978-3-540-21366-6. http://www.mn.uio.no/ifi/english/about/ole-johan-dahl/bibliography/the-birth-of-object-orientation-the-simula-languages.pdf 20211022. 

Kay, Alan (1993-03-01). The Early History of Smalltalk. ACM SIGPLAN Notices (Association for Computing Machinery) 28(3): 6995. doi:10.1145/155360.155364. 

Holmevik, Jan Rune (1994). Compiling Simula: A historical study of technological genesis. IEEE Annals of the History of Computing 16(4): 2537. doi:10.1109/85.329756. 

Meyer, Bertrand (2009). Touch of Class: Learning to Program Well with Objects and Contracts. Springer Science & Business Media. pp. 329. Bibcode: 2009tclp.book.....M. ISBN 978-3-540-92144-8 

関連項目

編集

システム

編集

モデリング言語

編集