Smalltalkによる例とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > Smalltalkによる例の意味・解説 

Smalltalkによる例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/29 19:11 UTC 版)

メソッド (計算機科学)」の記事における「Smalltalkによる例」の解説

Smalltalkによるインスタンスメソッドとクラスメソッドの例を示す。 Objectsubclass:#MethodSampleinstanceVariableNames:'name'"インスタンスオブジェクトに持たせるインスタンス変数"classVariableNames:''"クラスオブジェクトクラスオブジェクト直属のインスタンスオブジェクトの間で共有するクラス変数"poolDictionaries:''"クラスオブジェクトとインスタンスオブジェクトの間で共有するプール変数"category:'Example'. "インスタンスオブジェクトのインスタンス変数操作するメソッド(インスタンスメソッド)"MethodSample methodsFor: 'accessing'!givenName^ name.!givenName: aStringname := aString.!!"インスタンスオブジェクトとクラスオブジェクト操作するメソッド(インスタンスメソッド)"MethodSample methodsFor: 'inter-accessing'!name^ self givenName, ' ', self class familyName. !!MethodSample class instanceVariableNames: 'name'."クラスオブジェクト持たせるインスタンス変数""クラスオブジェクトインスタンス変数操作するメソッド(クラスメソッド)"MethodSample class methodsFor: 'accessing'!familyName^ name.!familyName: aStringname := aString.!!MethodSample class methodsFor: 'instance creation'!withGivenName: aString^ selfnewgivenName: aString;yourself.!! インスタンスメソッドを実行するには、まずインスタンスオブジェクトを生成しなければならない: | objectA objectB |objectA := MethodSample withGivenName: 'John'.objectB := MethodSample withGivenName: 'Joe'. 上の例では #withGivenName: により二つのインスタンスオブジェクトを生成し変数 objectA と objectB代入している。この時点で、objectA とobjectBインスタンス変数 name にはそれぞれ "John" と "Joe" が代入されている。 インスタンスメソッドを実行するには次のように記述する: objectA givenName."'John' を返す"objectB givenName."'Joe' を返す" 上の例では objectA と objectB それぞれのインスタンスオブジェクトに対し #givenName メッセージ送りインスタンスメソッドを実行している。それぞれのメソッド返り値異なることから、同じクラスオブジェクト属するインスタンスオブジェクトでもインスタンス変数が持つ値は、インスタンスオブジェクト毎に異なることがわかる。 一方、クラスメソッドを実行するには、クラスオブジェクト直接属しているため、インスタンスオブジェクトの代わりにクラスオブジェクトに対してメッセージを送る。クラスメソッドを実行するには次のように記述する: type := MethodSampletype familyName: 'Hillton'.type familyName."'Hillton' を返す". 上の例では typeクラスオブジェクトMethodSampleを代入して、#familyNameと#familyName:メッセージ送りクラスメソッドを実行している。 クラスオブジェクトインスタンス変数 name は、インスタンスオブジェクトのインスタンス変数異なり MethodSample に属す全てのインスタンスオブジェクトで共有されるクラスオブジェクトインスタンス変数共有される例を示す: | type objectA objectB |type := MethodSampleobjectA := type withGivenName: 'John'.objectB := type withGivenName: 'Joe'."#nameクラスオブジェクトに#familyName送っているため、異なるインスタンスオブジェクトでも'Hillton'が共有されている。"type familyName: 'Hillton'.objectA name."'John Hillton'を返す"objectB name."'Joe Hillton'を返す" クラスメソッドは、変数代入せず直接クラス名指定して呼び出すことが多い。特にクラスオブジェクトではない言語においては直接クラス名指定する書き方しかできない直接クラス名指定したクラスメソッドの呼び出し次のように記述する: MethodSample familyName: 'Hillton'.MethodSample familyName."'Hillton' を返す". なお、MethodSample のインスタンスオブジェクト生成するときに使用した new もクラスメソッドである。 一般的にインスタンスオブジェクトを生成する場合には new という特別な演算子用い言語が多い。しかし、Smalltalk影響が強い言語Rubyいくつかの言語ではクラスメソッドによりインスタンスオブジェクトを生成する。クラスメソッドによりインスタンスオブジェクトを生成する言語場合newを独自の実装変更することができる。例えnew実行したとき、別のクラスオブジェクト属するインスタンスオブジェクトを返すようにすることができる。C++のようにnew演算子ありながら、クラスメソッド (静的メンバー関数) としてnew定義できる言語もある。 クラスオブジェクトになっている言語場合インスタンスクラスも同じオブジェクトとして扱われるため、インスタンスメソッドとクラスメソッドメッセージ送り方に区別はない。インスタンスメソッドの代わりにクラスメソッドを呼び出すことも、クラスメソッドの代わりにインスタンスメソッドを呼び出すこともできる。どちらのメソッド呼び出すかは、メッセージ送った変数インスタンスクラスのうち、どちらのオブジェクト代入していたかで決まる。 多く言語ではインスタンスメソッドとクラスメソッドは同じシグネチャ (signature: 名前と引数) を定義できるSmalltalkObjective-Cなどメッセージ存在する言語ではメソッド多重定義できないため一見理なように見えるが、メソッド所属するオブジェクトインスタンスクラス異なるため、同一シグネチャインスタンスメソッドとクラスメソッド定義することができる。

※この「Smalltalkによる例」の解説は、「メソッド (計算機科学)」の解説の一部です。
「Smalltalkによる例」を含む「メソッド (計算機科学)」の記事については、「メソッド (計算機科学)」の概要を参照ください。

ウィキペディア小見出し辞書の「Smalltalkによる例」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Smalltalkによる例」の関連用語

Smalltalkによる例のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Smalltalkによる例のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのメソッド (計算機科学) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS