オブジェクトしこう‐プログラミング〔‐シカウ‐〕【オブジェクト指向プログラミング】
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/08/03 12:42 UTC 版)
オブジェクト指向プログラミング(オブジェクトしこうプログラミング、英: object-oriented programming, OOP)とは、「オブジェクト」という概念に基づいたプログラミングパラダイムの一つである。
- 1 オブジェクト指向プログラミングとは
- 2 オブジェクト指向プログラミングの概要
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/08 18:40 UTC 版)
「結合度」の記事における「オブジェクト指向プログラミング」の解説
サブクラス結合(Subclass Coupling) 子クラスとその親クラスとの間の関係で、子クラスは、その親クラスに依存しているが、親クラスが子クラスを知らない状態。子クラスが親クラスに依存しすぎると、親クラスを修正するのが難しくなる。 一時的結合(Temporal coupling) あるメソッドが別のメソッドに依存すること(例えば、executeしないとerrorが取得できない)。
※この「オブジェクト指向プログラミング」の解説は、「結合度」の解説の一部です。
「オブジェクト指向プログラミング」を含む「結合度」の記事については、「結合度」の概要を参照ください。
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/08/07 01:49 UTC 版)
「オブジェクト (プログラミング)」の記事における「オブジェクト指向プログラミング」の解説
「オブジェクト指向プログラミング」も参照 オブジェクト指向プログラミングパラダイムでは、関連するデータを束ね、代入、演算、手続き(関数やメソッドなど)を介した受け渡しといった操作の対象にでき、またメッセージの受け手になれる実体をオブジェクトと呼ぶ(ただし、数値などの基本的なデータ型はオブジェクトとしないプログラミング言語も多い)。多くの場合、オブジェクトは他のオブジェクトを要素として格納することができ、複雑なデータ構造を表現できる。なお、英語の object には「対象」「もの」といった意味がある。 オブジェクトは、プログラム上で実現したい概念(例えば「顧客」「社員」「課」「商品」「注文書」など)をメタファとして表現するのにもしばしば使われ、プログラムの設計を考えたり他人と共有したりするのに役立つと考えられている。またマウスカーソル、ウィンドウ、メニュー、ファイル、段落など、コンピュータ上でユーザが目にするもので、名前が付いているようなものはほとんどオブジェクトとして表現できる。 オブジェクトは、それ自身に関するデータだけでなく、それ自身や内部のデータに対する操作も束ねている場合が多い。例えば、注文書を表すオブジェクトには、注文する商品を追加する操作や注文を取り消す操作を用意することができる。またマウスカーソルを表すオブジェクトについては、上下左右に動かす、クリックするというような操作が考えられるし、ファイルのオブジェクトについては、コピー、削除などの操作が考えられる。操作対象と操作そのものの定義や動作をまとめて表現することでプログラムの見通しが良くなり、プログラミング効率やプログラムの再利用性を高めるのに寄与すると考えられている。 クラスベースのオブジェクト指向では、共通した特徴や動作をもつオブジェクトをまとめ、その共通の性質を記述・定義した、「オブジェクトの分類」をクラスという(英語の class は種類・分類の意味がある)。そして、あるクラスに分類される具体的なオブジェクトをそのクラスのインスタンスという。例えば、「ファイルというもの」や「アイコンというもの」の性質を定義したのがクラスであり、「ファイルというもの」の性質に沿った一つ一つのファイルを表すものが「ファイルクラスのインスタンス」である。
※この「オブジェクト指向プログラミング」の解説は、「オブジェクト (プログラミング)」の解説の一部です。
「オブジェクト指向プログラミング」を含む「オブジェクト (プログラミング)」の記事については、「オブジェクト (プログラミング)」の概要を参照ください。
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/03 23:37 UTC 版)
「Python」の記事における「オブジェクト指向プログラミング」の解説
Pythonでは扱えるデータの全てがオブジェクトである。単純な数値といった基本的なデータ型をはじめ、組み込みのコンテナ型、組み込み関数など、これらは全て統一的な継承関係をもつオブジェクトであり「型」をもっている。これらの組み込み型とユーザ定義型は区別されず、組み込み型を継承したクラスを定義できる。上の「データ型」の項で述べたように Pythonは静的な型チェックを持たないため、Javaのようなインターフェイスという言語上の仕組みは必要とされない。 クラスの継承 (inheritance) メカニズムでは、複数の基底クラスを持つことができ(多重継承)、導出されたクラスでは基底クラスの任意のメソッドをオーバライド(override; 上書き)することが可能である。 また、オブジェクトには任意のデータを入れることができる。これらのメソッドやデータは、基本的に、すべてpublicであり、virtual(仮想)である。ただし、先頭にアンダースコアをもつメンバをprivateとすることができる。これは単なるマナーであるが、アンダースコアを2つもつ場合は、クラスの外部からメンバの名前を隠された状態(mangle; 難号化)とすることでカプセル化を実現できる。また、利用者定義演算子が機能として用意されておりほとんどの組み込み演算子(算術演算子(arithmetic operator)や添字表記)はクラスインスタンスで使うために再定義することが可能となっている。
※この「オブジェクト指向プログラミング」の解説は、「Python」の解説の一部です。
「オブジェクト指向プログラミング」を含む「Python」の記事については、「Python」の概要を参照ください。
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/07 01:59 UTC 版)
「銀の弾などない」の記事における「オブジェクト指向プログラミング」の解説
オブジェクト指向プログラミングでは、クラスの概念を導入し、カプセル化と継承を活用することができる。 多くのソフトウェア工学分野の研究者が、オブジェクト指向プログラミングの有効性に大きな期待を寄せている (グラディ・ブーチ) 。 そして、ブルックス自身も、オブジェクト指向プログラミングに非常に期待している。 ただし、オブジェクト指向プログラミングも、ソフトウェア開発の過程における偶有的な複雑性の一つを除去するにとどまる。 したがって、オブジェクト指向プログラミングが発展しても、本質的な複雑性が低減されるわけではない。
※この「オブジェクト指向プログラミング」の解説は、「銀の弾などない」の解説の一部です。
「オブジェクト指向プログラミング」を含む「銀の弾などない」の記事については、「銀の弾などない」の概要を参照ください。
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/16 01:36 UTC 版)
「MATLAB」の記事における「オブジェクト指向プログラミング」の解説
MATLABは、オブジェクト指向プログラミングをサポートしている。しかし、シンタックスと呼出規約が他言語と大きく異なる。MATLABは、値参照と、参照クラスを用意している。メソッドを呼ぶ方法の一例は以下である。 object.method(); object がクラスのインスタンスであれば、object のメンバーを選択することで、メソッドを呼ぶことができる。 classdef hello methods function greet(this) disp('Hello!') end endend hello.m 名のファイルを配置した後、次のコマンドを実行する。 >> x = hello;>> x.greet();Hello!
※この「オブジェクト指向プログラミング」の解説は、「MATLAB」の解説の一部です。
「オブジェクト指向プログラミング」を含む「MATLAB」の記事については、「MATLAB」の概要を参照ください。
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/08/14 07:32 UTC 版)
「上位概念、下位概念、同位概念および同一概念」の記事における「オブジェクト指向プログラミング」の解説
オブジェクト指向プログラミングにおいて、ある概念を表すクラスの上位概念を表すクラスをそのクラスのスーパークラスという。また、下位概念を表すクラスをそのクラスのサブクラスという。
※この「オブジェクト指向プログラミング」の解説は、「上位概念、下位概念、同位概念および同一概念」の解説の一部です。
「オブジェクト指向プログラミング」を含む「上位概念、下位概念、同位概念および同一概念」の記事については、「上位概念、下位概念、同位概念および同一概念」の概要を参照ください。
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/11 01:34 UTC 版)
「オブジェクト指向分析設計」の記事における「オブジェクト指向プログラミング」の解説
詳細は「オブジェクト指向プログラミング」を参照 オブジェクト指向プログラミング (OOP; object-oriented programming) は、オブジェクト指向開発におけるオブジェクト指向設計 (OOD) の次の工程であり(この「次の工程」という概念自体はウォーターフォール開発に固有の概念であり、それ自体はOOADともオブジェクト指向(及びオブジェクト指向プログラミング)とも独立・無関係である)、この工程でソフトウェアのプログラミングを行う。 オブジェクト指向プログラミングでは、ほとんどの場合、プログラミング言語としてオブジェクト指向プログラミング言語 (OOPL; object-oriented programming language) を採用する。オブジェクト指向プログラミング言語では、オブジェクト、クラス、情報隠蔽、継承、多態性 (ポリモフィズム) などの概念を、プログラミング言語に組み込んでいる。そのため、オブジェクト指向プログラミング言語を有効に活用することで、オブジェクト指向プログラミングを効率的に行うことができる。 一方で、オブジェクト指向プログラミングにオブジェクト指向分析設計が有効か否かは、さだかではない。オブジェクト指向分析設計ではしばしば前述のようにプログラミングが分析設計の「次の工程」であるとウォーターフォール開発的に信じられていることもあるようだが、そのような考え方はオブジェクト指向プログラミングの流行によって生まれてきた、オブジェクト指向分析設計以外の多くの手法、特にアジャイルソフトウェア開発では完全に否定されている。また本来は、オブジェクト指向分析設計はクラスベースオブジェクト指向への拘泥は無いはずであるが、現実には多くのオブジェクト指向分析設計の解説においてクラスベースオブジェクト指向が大前提となっており、JavaScriptなどプロトタイプベースの観点は見られない。
※この「オブジェクト指向プログラミング」の解説は、「オブジェクト指向分析設計」の解説の一部です。
「オブジェクト指向プログラミング」を含む「オブジェクト指向分析設計」の記事については、「オブジェクト指向分析設計」の概要を参照ください。
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/01/06 05:45 UTC 版)
「MooTools」の記事における「オブジェクト指向プログラミング」の解説
MooToolsは多くのオブジェクト指向言語と似たようなしっかりしたクラス生成と継承のシステムを備えている。例えば、以下は英語版Wikipediaにあるこちらのポリモーフィズムの例と同じことをMooToolsで実現したものである。 var Animal = new Class({ initialize: function(name){ this.name = name; } }); var Cat = new Class({ Extends: Animal, talk: function(){ return 'Meow!'; } }); var Dog = new Class({ Extends: Animal, talk: function(){ return 'Arf! Arf'; } }); var Animals = { a: new Cat('Missy'), b: new Cat('Mr. Bojangles'), c: new Dog('Lassie') }; for(var animal in Animals) alert(animal.name + ': ' + animal.talk()); // alerts the following: // // Missy: Meow! // Mr. Bojangles: Meow! // Lassie: Arf! Arf!
※この「オブジェクト指向プログラミング」の解説は、「MooTools」の解説の一部です。
「オブジェクト指向プログラミング」を含む「MooTools」の記事については、「MooTools」の概要を参照ください。
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/02 00:56 UTC 版)
「クリステン・ニゴール」の記事における「オブジェクト指向プログラミング」の解説
1960年代にオーレヨハン・ダールと共にオブジェクト指向プログラミングを創始し、プログラミング言語Simulaを開発したことで知られている。現代情報社会の基盤を形成しているコンピュータシステムは人類が創造した最も複雑なものである。ニゴールらが行った革新的研究によってその複雑さを管理することが可能となった。 1956年、オスロ大学で数学の修士号を取得した。論文テーマは "Theoretical Aspects of Monte Carlo Methods"(モンテカルロ法の理論的側面)である。ノルウェー国防研究機構に1948年から1960年まで勤務した(1954年ごろまで、情報工学とプログラミング、1952年ごろから、オペレーションズリサーチを主に担当)。1957年以降、同機構初のオペレーションズリサーチグループのリーダーとなった。彼はノルウェーでのオペレーションズリサーチの学会の設立にも関与し、初代会長も務めた(1959年-1964年)。 1960年、ノルウェー・コンピューティング・センター (NR) に雇われ、研究機関としての基礎固めを行い、1962年に研究部門長となった。ここでオーレヨハン・ダールと共同で世界初のオブジェクト指向プログラミング言語 SIMULA I(1961年-1965年)とSIMULA 67を開発した。その後のオブジェクト指向言語を構成するオブジェクト、クラス、継承、マルチスレッドプログラム実行などはここで生み出された。1971年から1973年まで、労働運動の目的を考慮してノルウェーの労働組合の計画、コントロール、データ処理などを評価する研究を行った。また、1975年ごろまでコンピュータ技術が社会に与える影響などの研究を行い、同時に汎用システム記述言語 DELTA を開発した。 1975年から1976年まで、デンマークのオーフスで教授を務め、その後オスロで名誉教授となった(1977年からパートタイム、1984年から1996年までフルタイム)。この時期にシステム開発とコンピュータ技術の社会への影響について研究と教育を行い、参加型デザインと呼ばれる分野に密接に関連する Scandinavian School in System Development を設立した。 1976年から汎用オブジェクト指向プログラミング言語 BETA の開発と実装(1986年から)に携わった。この言語は今では様々なコンピュータで使用可能となっている。 1980年代前半、スカンディナヴィアの研究プログラム SYDPOL の運営委員会会長を務めた。これはシステム開発、言語研究、人工知能などを研究するグループをサポートするものである。 1990年6月、スウェーデンのルンド大学から名誉博士号を授与され、1991年6月にはデンマークの University of Aalborg からも名誉博士号を授与された。また、ノルウェー科学アカデミーの会員にもなった。1990年10月、社会的責任を考えるコンピュータ専門家の会はニゴールの貢献に対してノーバート・ウィーナー賞を授与した。 1995年から1999年、分散型システムに関する研究を行った。1997年から3年間、GOODS(General Object-Oriented Distributed Systems)のリーダーを務めた。これはハードウェア基盤からユーザーまでを含めた階層型の分散システムを設計可能なオブジェクト指向言語と開発手法の改良を目指したものである。 2000年6月、「オブジェクト技術のコンセプトを生み出した」ことに対して、オブジェクト指向の国際標準化団体 Object Management Group(OMG) から名誉フェローとして表彰された。2001年11月、ダールと共に「SIMULA 67 の設計と実装を通してオブジェクト指向プログラミングのコンセプトを生み出したことに対して」IEEEフォン・ノイマンメダルを受賞した。2002年2月、再びダールと共に2001年のチューリング賞を受賞した。受賞理由は「プログラミング言語 Simula I と Simula 67 の設計を通してオブジェクト指向プログラミングの基本的なアイデアを生み出したことに対して」である。 晩年の研究は主に入門的なプログラミング教育と情報学のためのプロセス指向概念基盤の創造であった。このための新たな研究プロジェクト COOL(Comprehensive Object-Oriented Learning) で開発が行われた。
※この「オブジェクト指向プログラミング」の解説は、「クリステン・ニゴール」の解説の一部です。
「オブジェクト指向プログラミング」を含む「クリステン・ニゴール」の記事については、「クリステン・ニゴール」の概要を参照ください。
オブジェクト指向プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/25 05:39 UTC 版)
「ボイラープレートコード」の記事における「オブジェクト指向プログラミング」の解説
オブジェクト指向プログラミングでは、多くの場合、クラスにはインスタンス変数を取得、設定するためのメソッドが提供される。これらの定義は、定型文と見なされる。コードはクラスごとに異なるが、構造は決まりきっているため、手動で記述するよりも自動的に生成する方が適切である。たとえば、ペットを表す次のJavaクラスでは、Pet 、 name 、およびownerの宣言を除いて、ほとんどすべてのコードが定型文である。 public class Pet { private String name; private Person owner; public Pet(String name, Person owner) { this.name = name; this.owner = owner; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Person getOwner() { return owner; } public void setOwner(Person owner) { this.owner = owner; }} この例のボイラープレートの殆どは、カプセル化のために存在する。変数nameとownerがpublicとして宣言されている場合、アクセサメソッドとミューテーターメソッドは必要ない。 ボイラープレートの量を減らすために、 JavaならばLombokのようなフレームワークが開発されている。 上記と同じコードは、メタプログラミングの形式であるJavaアノテーションを使用してLombokによって自動生成される。 @AllArgsConstructor @Getter@Setterpublic class Pet { private String name; private Person owner;} 他のいくつかのプログラミング言語では、その言語にそのような一般的な構造のサポートが組み込まれている場合、より少ない定型文で同じことを達成できる可能性がある。たとえば、上記のJavaコードに相当するものは、1行のコードを使用してScalaで表現できる。 case class Pet(var name: String, var owner: Person) または、 C#では、コンパイラによって生成されたバッキングフィールドで自動プロパティを使用する。 public class Pet { public string Name { get; set; } public Person Owner { get; set; }}
※この「オブジェクト指向プログラミング」の解説は、「ボイラープレートコード」の解説の一部です。
「オブジェクト指向プログラミング」を含む「ボイラープレートコード」の記事については、「ボイラープレートコード」の概要を参照ください。
「オブジェクト指向プログラミング」の例文・使い方・用例・文例
固有名詞の分類
プログラミング言語 | ALGOL SuperCollider オブジェクト指向プログラミング Lazy K FORTRAN |
- オブジェクト指向プログラミングのページへのリンク