タグ

OOに関するSiroKuroのブックマーク (22)

  • 脱オブジェクト指向のススメ:ビジネスをデザインするブログ:オルタナティブ・ブログ

    知り合いから相談に乗ってやってくれと頼まれたので、ある若手プログラマと会って話をした。お題はスキルパスについでだ。大学を卒業後、独学でプログラミングを学び、現在は中規模開発会社で、主に業務システムの開発に携わっているそうだ。 で、相談の内容は、「このまま現在の業務を続けるか、辞めて、専門学校などでゼロからプログラミング(というかシステム構築)を学びなおすべきか」というものだった。 で、「どうして?」って聞いたところ。 「やっぱり、オブジェクト指向とか、きちんと理解していないので、基礎からやり直したいんです」とのこと。 で、よくよく話を聞いてみると、要は、現場の開発において発生するいろいろな課題を解決できないのは、オブジェクト指向などをよく理解していないからでは?と思いこんでいるようである。 「・・・・」 この手の相談を受けるたび、正直私は気が遠くなるのだ。ITmediaの紙面上で書くのは少

    脱オブジェクト指向のススメ:ビジネスをデザインするブログ:オルタナティブ・ブログ
  • オブジェクト指向の学び方 - 千里霧中

    ソフトウェア開発 実は最近オブジェクト指向に関する指導などで、オブジェクト指向の学び方について考える機会が増えています。今回は思考の整理も兼ねて、その学び方についてまとめてみようと思います。オブジェクト指向をめぐる混乱 オブジェクト指向の定義やアプローチに関しては、一部混乱が存在します。そららは学習を阻害するリスクを十分持っていますので、学び方に入る前の予防的な確認として、一度主要なものを列挙したいと思います。 工程間での混乱 オブジェクト指向は様々な工程に導入されていますが、それぞれで独自の世界が形成されている領域があります。 例えば分析工程では、アクターやデータベース、機能プロセスといった現実世界や仕様上の構成要素にオブジェクトやクラスを割り当て、その挙動やコミュニケーション手段を継承やプロパティで表現する方法論が、オブジェクト指向分析やUMLモデリングといった形で確立されています。そ

    SiroKuro
    SiroKuro 2009/08/26
  • クラス継承、リスコフの置換原則、部分集合の型 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「クラス、オブジェクト、型; なんだか変じゃない?」に、まだチラホラとコメントが付いているようです。んじゃ、少し補足しておきましょう。 何人かの方が「リスコフの置換原則」に言及しているので、その話。それと、列挙型や部分範囲型についても触れます。「クラス、オブジェクト、型; なんだか変じゃない?」に挙げておいた事例(Point3D extends Point2Dとか)は断りなしに引用します。 継承では、受け継ぐ財産を拒否できない 「クラスはデータと手続きを一緒に定義したものだ」とか言われますね。データはヒープ上のメモリブロックで、手続きはサブルーチンのセットです。クラス継承によって、データも手続きもいやおうなくサブクラスへと押しつけられます。要らないと言ってもダメです。 例えば、bonotake方式で UserHandle extends UserID とした場合、UserHandleでは

    クラス継承、リスコフの置換原則、部分集合の型 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    SiroKuro
    SiroKuro 2009/05/29
    "いや、別に人生まで終えなくてもいいが" "って、やっぱり成仏するのか"
  • カプセル化、情報隠蔽、データ隠蔽 - ぐるぐる~

    あちこちのサイトを見てると、間違った解釈をしてるのが多い。カプセル化なんて、情報隠蔽まで含んでるのが常識になりつつあるような。。。ここまで一般化してると情報隠蔽してるのがカプセル化というのが常識なのかも。 カプセル化・情報隠蔽・データ抽象化 - 今日の役に立たない一言 − Today’s Trifle! − カプセル化と情報隠蔽、データ隠蔽の違いがよくわからくなったので、手持ちので調べてみた。 基準 基準としては、 カプセル化、情報隠蔽、データ隠蔽の関係 カプセル化は隠蔽を含んでいるかどうか 対象はクラスのみか、そうでないか などなど。 一番目はそのまんま。二番目は、 // 隠蔽せずともカプセル化か class Hoge { int hoge; // なんかhogeを使うメソッド } // 隠蔽しなければカプセル化ではないか class Piyo { private int piyo;

    カプセル化、情報隠蔽、データ隠蔽 - ぐるぐる~
    SiroKuro
    SiroKuro 2009/02/19
    素晴らしい資料
  • オブジェクトを表すのに最低限必要なものは5つである - 宇宙行きたい

    存在しないを表す nil 真を表す true 偽を表す false 自分自身を参照する self 親を参照する super というお話しを今日、聞いた!! で、それだけしか予約語がない Smalltalk を学ぶべきだ!!と (wikipedia みたら 実行中のコンテキストを参照する「thisContext」があった><) http://www.smalltalk-users.jp/ 2/25 に勉強会があって最初から教えるからおいでと誘われた!! がんばって環境作ります!!って言ったら 環境から作ってあげるからマシンだけ持ってくればOKと!!! まったくわからないけど、OO厨の総山に勉強しに行ってきます!!! 追記: そういえば Mac しか持ってないんだけど大丈夫なのかなぁ?

    オブジェクトを表すのに最低限必要なものは5つである - 宇宙行きたい
    SiroKuro
    SiroKuro 2009/02/16
  • オブジェクト指向の概念の発明者は誰ですか? - Smalltalkのtは小文字です

    忙しい人のためのまとめ 一般に「オブジェクト指向プログラミング」と呼ばれる考え方には発案者が異なる二系統がある。(ただし簡単のため、次のうち前者から批判的に派生して生じたプロトタイプベースのオブジェクト指向はここには含めていない) アラン・ケイによる、変化に強い長期運用可能な遅延結合システムを SIMULA67 にあった「オブジェクト」をメッセージの受け手とすることで実現(オブジェクトにメッセージ送信)するアイデアに基づく「メッセージングのオブジェクト指向」と、 ビアルネ・ストラウストラップ(前後して抽象データ型を発案したリスコフ人、オブジェクトクラスを考えたニガードらSIMULA陣営、Eiffelのメイヤーらも同様の着想を得ている)による、ユーザー定義型(抽象データ型)を SIMULA67 にあった「クラス」という言語機能を使って実現(カプセル化、継承、多態性)するアイデアに基づく「抽

    オブジェクト指向の概念の発明者は誰ですか? - Smalltalkのtは小文字です
    SiroKuro
    SiroKuro 2009/01/23
    あれ。この記事ブックマークしていなかったのか。
  • 二つのオブジェクト指向とそれぞれのメリット - Smalltalkのtは小文字です

    似たような話の繰り返しで恐縮ですが、現時点での自分の理解の整理のためのメモ。 前後しますが、こうして改めてまとめてみると、純粋な抽象データ型のオブジェクト指向プログラミングは、メッセージングのオブジェクト指向の影響も多分に受けている OOAD(分析・設計)のテコ入れ無しには、ちょっと弱っちく&古くさい感じが否めませんね(何をいまさら…ですが)。^^; とはいえ、OOAD は OOP とはまた別のものなので、同じ「抽象データ型の〜」あるいは「メッセージングの〜」だからといって対応する OOP とひとくくりにしてよいかというとそういうわけでもないので(整理・分類上は)難しいところです。 ▼ 抽象データ型のオブジェクト指向プログラミング 端的には、「ユーザー定義型(抽象データ型)」を、当初は「クラス」、今はそれに加えて「インタフェース」に準ずる言語機能によるサポートを前提として実践するプログラミ

    二つのオブジェクト指向とそれぞれのメリット - Smalltalkのtは小文字です
    SiroKuro
    SiroKuro 2008/10/29
  • 2008/10 b ネットと匿名について

    s-e-l-f n-a-rr-a-t-i-v-e. /01 [6] (08:35) oya、ゆうべはパソコニの電源を切らずに眠ってしまったらしい。 よくないこった。 /31 [5] (08:02) ああ、シメキリが…。(来は締切ではなくて、納期というべきであ) けさも寒いね! (23:17) わざと? わざと。 さて、きのうはまた自分が書いたコードで、 やたらと原始的なバグを発見してしまった。だいたい、以下のようなコードである: typedef struct _buffer { char* ptr; int size; int len; } buffer; /* バッファbufの末尾に nバイトの文字列を追加する。 */ void append(buffer* buf, char* s, int n) { if (buf->size < buf->len+n) { /* バッファが足りな

    SiroKuro
    SiroKuro 2008/10/28
    オブジェクト指向とは何か。『システム内を幾つかの区間に分割して取り扱うための分割方針の1つだ』 以上。
  • Ruby1.9 のクラスのメタ階層を整理する - Smalltalkのtは小文字です

    [ruby-core:18437] Class as second-generation singleton class を読んだ当初は、特異クラスのクラスが Class ってことでええやん!と思ったのですが、改めて調べてみるとどうやら必ずしもすべての特異クラスが Class に属するわけではないようで(かつ、確認する過程で、id:sumim:20080111:p1 の間違いを見つけてしまったり、id:sumim:20061019:p1 の謎が解けたりもしたので)、この機会に表題の件についていったん図にして自分なりに理解を整理しておくことに。 関連: Ruby1.9 のクラスのメタ階層を整理する 2 - Smalltalkのtは小文字です Ruby1.9 のクラスのメタ階層を整理する 3 - Smalltalkのtは小文字です Ruby で、クラスのメタ階層の情報を得る際の注意として、Ru

    Ruby1.9 のクラスのメタ階層を整理する - Smalltalkのtは小文字です
  • プロトタイプベースの誤解 - Smalltalkのtは小文字です

    クラスベースのOOとプロトタイプベースのOOで決定的に違うのは、プログラムを動かしている最中にオブジェクトが出来ること、すなわちメソッド(method)を追加したり再定義したりできるかだ。 404 Blog Not Found:タイプ・クラス・プロトタイプ - OOの語彙 これはひどい。w オブジェクトに対して動的(実行時)にメソッドやインスタンス変数を追加できることと、“プロトタイプベース”においてオブジェクトがそれが属するクラスによらず独自のメソッドやインスタンス変数を持てることとは別の話です。 あらためて、「プロトタイプベース」という用語自体に問題が多いことを実感させられる記事でもありますね。個人的には、クラスを用いないオブジェクト生成手法の話でないのならば(つまり、「プロトタイプの複製でオブジェクトを生成する」ことが話の筋でないならば)「プロトタイプベース」ではなく、「インスタン

    プロトタイプベースの誤解 - Smalltalkのtは小文字です
  • なんで多重継承はそんなに嫌われるのか? ちょっくら分析してみるか - 檜山正幸のキマイラ飼育記 (はてなBlog)

    多重継承を嫌う人は多いですよね。「複雑だからダメだ」ってことらしい。でも、「複雑=ダメ」はちょっと乱暴。必然性/必要性がある複雑さなら、それは受け入れざるをえないのですから。それに、どの程度の複雑さなのか、その複雑さはどこから来るのかを知らないと「ダメ」かどうかの判断はできないと思います。 という次第で、多重継承の複雑さを調べてみます。ダメかどうかの判断は僕はしません。圏論の道具を使うのだけど、事前の知識は一切不要です(最後の節を除いて)。最後にまとめて圏論的な解釈をしますが、ここは省略可能。 内容: クラスとその例 多重継承は集約と単純継承の組み合わせ 嫌われる理由 1:名前のバッティング 嫌われる理由 2:ダイアモンド継承 ダイアモンド継承の対処 とりあえずのまとめ 圏論からのアプローチと整理 クラスとその例 多重継承の話をするので、もちろんクラス概念は仮定します。でも、複雑さの話を複

    なんで多重継承はそんなに嫌われるのか? ちょっくら分析してみるか - 檜山正幸のキマイラ飼育記 (はてなBlog)
    SiroKuro
    SiroKuro 2008/03/04
  • Ruby のクラスとインスタンスの関係(あるいはモジュールと特異メソッドについて) - val it : α → α = fun

    http://d.hatena.ne.jp/m-hiyama/20080109/1199863428http://d.hatena.ne.jp/sumim/20080109/p2 うーん、タイトルでスルーしてたけどさすが面白い。誰か Rubyist が既に書いているかな?という気がしますけど。まあいいか。以下は少しだけ調べながら書きましたが、カンチガイなどにより嘘や不正確な情報が混じっている可能性があります。 まず Ruby は Smalltalk に影響を受けた(とされる)オブジェクトシステムを使っています。ということで、 Object という識別子はクラスという概念を指すと同時に「Objectクラスオブジェクト」も指します。ややこしいことに Ruby にも Object.class という表現は存在するのですが、それは「Objectクラスオブジェクト」ではありません。「Object ク

    SiroKuro
    SiroKuro 2008/01/11
    Class をメタクラスとか考えるから難しくなるのであって、単なる「クラス的な何か」にアクセスするためのスタブを Class と考えれば後は楽そうな気はするなぁとか何となく思った
  • id:m-hiyama:20080109:1199863428 を Ruby で - Smalltalkのtは小文字です

    せっかくなので Ruby(1.9)についても調べてみました。結論から書くと、Ruby も Smalltalk と同じく四階建てで、その造りもそっくりでした。この絵が網羅している範囲に限れば、両者はほぼ“瓜二つ”。 ただ、隠し事をしない Smalltalk と違って、何もかもさらけ出してしまうことを必ずしも佳しとしない Ruby では、表面上は三階建てのフリをしている and/or 特異クラスが不可視化されているせいで、上図のような実情どおりにはユーザーには見えません。ちなみにどんな“フリ”をしているかは次図に。 前後しますが、Ruby には「特異クラス」という、オブジェクト特異的な通常は不可視の無名クラスをアドホックに作れる(つまり元のオブジェクトはそれまでのクラスのもとを離れ、新しく作られた特異クラスのインスタンスとなる…)機構があり、これをインスタンス特異的なメソッド(Ruby ローカ

    id:m-hiyama:20080109:1199863428 を Ruby で - Smalltalkのtは小文字です
    SiroKuro
    SiroKuro 2008/01/11
    こーいうの見てると、世界の中から世界の理を知ろうとする物理学のアプローチを思い浮かべます
  • いまさらながらだけど、オブジェクトとクラスの関係を究めてみようよ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    オブジェクトとクラスの関係について、次のような説明を見かけました(文言の引用ではなくて、檜山による要約)。 オブジェクトとクラスは全体としてツリー構造をしていて、ツリーの末端をオブジェクト、末端以外のノードをクラスという。末端であるオブジェクトは、その親ノードであるクラスのインスタンスと呼び、クラスどおしの親子関係を継承関係と呼ぶ。 うーむ、この説明、ある意味「簡潔でわかりやすい」とも言えるのだけど、ちょっと単純化し過ぎでしょ。 オブジェクトやクラスの概念て、そんなに美しくもなきゃ、整合的でもありません。実用性やら実装上の都合やらでゴチャゴチャですがね。しかし、そのゴチャゴチャが悪いともいえません。ゴチャゴチャを無理に単純化することなく、必然性を持った(幾分は偶発的だけど(苦笑))複雑さとして理解すべきかと思います。 というわけで、メタクラスやレイフィケーション(reification)な

    いまさらながらだけど、オブジェクトとクラスの関係を究めてみようよ - 檜山正幸のキマイラ飼育記 (はてなBlog)
    SiroKuro
    SiroKuro 2008/01/09
    このあたりが複雑になったから Self は生まれた
  • 長文日記

    SiroKuro
    SiroKuro 2007/10/16
    自分の若さを再認識させられる記事。ってかどうやれば高みにいけるんですか……
  • 404 Blog Not Found:perl - 万能なnewの書き方

    2007年04月23日22:45 カテゴリLightweight Languages perl - 万能なnewの書き方 Perl 5のOOは、慣れてしまうと簡単だ。 継承とか考えずに、普通にクラスを作りたければ、必要なのは以下の二行だけ。 package Klass; sub new { bless {} }; これだけでは何もできないので、とりあえずnameというアクセサーを追加してみる。これだけ。 sub name { my $self = shift; $self->{name} = shift if @_; return $self->{name}; } しかし、上の形式だと、継承をサポートしていない。だから、 package Klass; sub new { bless {} }; package Klass::Sub; our @ISA = qw/Klass/; # new

    404 Blog Not Found:perl - 万能なnewの書き方
  • Cで実現する「ぷちオブジェクト指向」:CodeZine

    はじめに CodeZineではお初にお目にかかります、επιστημη(エピステーメー)です。最初のアーティクルはクラシックなCのお話。 昨今のアプリケーションはオブジェクト指向言語による実装が主流と言ってもいいでしょう。C++Java、VB.NETさらにはRubyPythonといったスクリプト言語まで、オブジェクト指向でない言語を探すのに苦労するくらいです。 記事では、今なお現役バリバリで活躍している手続き型言語の代表格(?)Cによる、オブジェクト指向のマネゴト(オブジェクト指向風味のCコーディングスタイル)を試みます。対象読者 もっぱらCを主な開発言語として使ってはいるけども、オブジェクト指向に興味と憧れを抱いている方。抽象データ型 手始めにオブジェクト指向の特徴の1つ、「抽象データ型(ADT:Abstract Data Type)」をCで実現してみます。抽象データ型とは、データ

    SiroKuro
    SiroKuro 2007/02/14
    えぴすてーめーさんの記事
  • d.y.d. - PEPM

    02:35 07/01/31 Dja 現状の Phobos (Dのランタイムライブラリ) は locale が UTF-8 じゃない環境だと全然使えません。 文字が化け化けです。…という話題でDスレが盛り上がってました。自分は必要になるたびに場当たり的に対処してたのですけど、せっかくなので 手元に散らばってるソースからそれに対処してるつもりっぽい箇所を寄せ集めてみました。 → tx ついでに、writefln が writefln しかないのが不便だなーと前に言ってた点についての 場当たり的対処が入っています。あと、readf が面倒だと思って Java の Scanner 風のを D で書いたヤツが どっかにあるはずなのでただいま探索中。あー、ファイル名の文字コードもどうにかしないといけないんだっけ。 wchar_t が Unicode でない環境が今手元にないので、その部分は未テストで

  • FOOL/WOOD 2007 Accepted papers

  • 数理科学的バグ撲滅方法論のすすめ 第4回 関数型言語とオブジェクト指向,およびOCamlの"O"について

    関数型言語とオブジェクト指向は相容れない,という説をよく聞く。たしかに「オブジェクトは状態を持つ」「関数型プログラミングでは,できるだけ破壊的代入を行わない」とすれば,二つの概念は矛盾しているようにも思われる。また,技術的観点以外にも,「とかくシンプルさを好む多くの関数型言語プログラマが,何かと物事を複雑にする(と思われている)オブジェクト指向を嫌っている」という面があるかもしれない。 しかし,個人の好き嫌いはさておき,実際問題として,関数型言語とオブジェクト指向は大いに関係がある。むしろ,基礎理論については,ほとんど同じコミュニティの人たちが取り組んでいる,と言ってもいい。例えば,以下のような研究が,1980年代から現在に至るまで行われている。 関数型言語のモデルであるλ計算という体系において,オブジェクトを表現する研究(参考リンクなど) λ計算にならい,(プロトタイプベースの)オブジェ

    数理科学的バグ撲滅方法論のすすめ 第4回 関数型言語とオブジェクト指向,およびOCamlの"O"について