WSOFT
  • Home
  • About
  • Works
  • Docs
  • Download
  • Contact
           
WSOFT

Home

About

Works

Docs

Download

Contact


           
法的資料  |  プライバシーポリシー  |  サービス状況  |  サイトマップ

Copyright © 2017 WSOFT All Rights Reserved.

Blog

  • WSOFT Blog
  • ブログ
    • News
      • WSOFT's blog
      • WSOFTのアイコンを入手する
      • WSOFTの製品の一覧
      • wsoft.wsへのドメイン移行に関する情報
      • WSOFTのロゴ変更に関する情報
      • WSOFTのドキュメントの WSOFT Docs への移行に関する情報
      • Raspberry Pi初代やZeroでAliceScriptを実行する
      • Losetta0.9.16に更新した後のエラーを直す
      • WSOFT AdventWeekへようこそ
    • たい
      • たい's blog
      • DiscordのBotは多重人格の夢を見るか?
      • GP2040-CEを自分でカスタマイズしてビルドする話
      • オブジェクト指向には2種類あるのかもしれない話
    • Zen
      • たわいもない話1
      • たわいもない話2
  • 共同作成ガイド
  • 製品
  • 法的資料
  • あみうは
  • 放送部マニュアル
目次
  • メッセージパッシングを主とするオブジェクト指向
  • データの整理手段としてのオブジェクト指向

オブジェクト指向には2種類あるのかもしれない話

  1. WSOFTBlog
  2. ブログ
  3. たい
  4. オブジェクト指向には2種類あるのかもしれない話

メッセージパッシングを主とするオブジェクト指向とデータ整理の手段としてのオブジェクト指向のふたつについて


taiseiue | 2024-06-03


純粋なブログ記事としては2つ目です。今日研究室で聞いた、オブジェクト指向について、系統が違うふたつの世界について。

いろいろ調べていくうちに二つのオブジェクト指向とそれぞれのメリットという記事に出会ったので教授の話とこの記事をまとめて自分の中で納得できる状態にしたい。

そもそもオブジェクト指向とは、アラン・ケイが考案したメッセージパッシングを主とするオブジェクト指向と、それとは別経路で抽象データ型から発展していったオブジェクト指向があるみたい。

メッセージパッシングを主とするオブジェクト指向

端的には、「動的」なシステム構築を「メッセージング」を介して実践するプログラミング。究極的にはその先に、インターネットのような仕組みを封じ込めたシステム、あるいは、多細胞生物のような仕組みで動くシステムを目指していると考えるとイメージしやすい。

「二つのオブジェクト指向とそれぞれのメリット」より引用

私は普段C#を書くので、C#っぽい言葉で表現すると全てのオブジェクトが匿名型ないしdynamicなイメージ?

この世界では「オブジェクトは均一で万能な細胞」として認識されているがゆえ、生成したあとにメンバーを付け足していく。この特徴はPythonやJavaScriptにも存在している。

Python
class MyClass:
    def __init__(self, name):
        self.name = name

# インスタンスを作成
obj = MyClass("test")

# プロパティを追加する
setattr(obj, 'newProperty', 123)

# 出力:123
print(obj.newProperty)
JavaScript
let obj = {}; // 空のオブジェクトを作成する

obj.newProperty = 123; // プロパティを追加する
console.log(obj); // 出力:{ newProperty: 123 }

こういった言語の(あるいは世界の)オブジェクトは、それぞれ個別にメンバーの名前と実体のペアを持つ辞書を(少なくとも論理的には)内部に持っている。(Pythonでは__dict__としてアクセスできるそう。)

この世界のインスタンスが持つべきメンバーは、多少継承によって束縛されているとはいえ、基本的にインスタンスの自由。インスタンスがこの型を持っているから、その型で約束された同一の挙動をするはずだという考えは通じない。

メッセージ・パッシングのオブジェクト指向では、メッセージを送られた側が何をするかは、基本的に、送られた側の判断事項です。たとえば、Observer パターンで、変更の発生をSubject から通知された Observer が何をするのかは Observer の自由であって、Subject 側は関知しません。

メッセージ・パッシングのオブジェクト指向の本当の狙いは、全体を構成する各部分が実行時に結合され、その結合のされ方も、ユーザーの振る舞いに応じてダイナミックに変わっていくような、非常に動的なソフトウェア構造を作り出すことでしょう。

「2つのオブジェクト指向ーメッセージ・パッシングと抽象データ型」より引用

あらゆるオブジェクトは相互にメッセージを送り合い、それらのメッセージの送り合いが広大に広がっているイメージとのこと。メッセージという表現をしている理由は英文法に近い形で表現できることにあると思う。

このような思想のもと設計された言語は結構あるみたい。

  • Smalltalk
  • JavaScript
  • Python
  • Objective-C

データの整理手段としてのオブジェクト指向

端的には、「ユーザー定義型(抽象データ型)」を、当初は「クラス」、今はそれに加えて「インタフェース」に準ずる言語機能によるサポートを前提として実践するプログラミング。俗に「カプセル化・継承・ポリモーフィズム」という三点セットに集約・象徴されるようになって久しいが、これはまず最初の「カプセル化」が「抽象データ型」を表わし、それを実現するために使用する「クラス」の特徴としての「継承」と「ポリモーフィズム」があとに続けられたものだと解釈すると言わんとするところの対応がつけやすい。

「二つのオブジェクト指向とそれぞれのメリット」より引用

抽象データ型でのオブジェクトは、データとそれを使った手続きのための関数のセットみたい。より誇張するなら、「実装の隠蔽」こそ抽象データ型でのオブジェクト指向の狙いなのかも。目的は堅牢性の向上やから実務目的ですかね。

個人的には、C言語などの構造体を由来とするように思う。 C言語の派生だから、手続型言語の面影を残すようにプログラムはMain関数から始まってMain関数へと帰っていく。

抽象データ型のもと設計された言語≒静的型付け言語

  • C++
  • C#
  • Java

Copyright © 2017 WSOFT All Rights Reserved.

利用規約  |  プライバシーポリシー  |  サービス状況  |  サイトマップ

WSOFTロゴ WSOFTについて

Copyright © 2017 WSOFT All Rights Reserved.

WSOFTはこのサイトでの頒布にあたって、WSOFT以外のコンテンツに対して所有権を主張しない上、何ら追加のライセンスも付与しません。 WSOFT以外のコンテンツの著作権等は、それぞれの権利保有者に帰属します。詳しくは利用規約を参照してください。


WSOFTのサイトでは、GoogleAnalyticsを使用してアクセスログを収集しています。詳しく知るにはプライバシーポリシーを参照してください。

検索
キーワードを入力して検索を始めましょう