オブジェクト指向を端的に表すと
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0061ホゲハゲ
NGNGルートのクラス設計で思いっきり特化しまくると
誰も継承できなくなるってパターンが…
0062デフォルトの名無しさん
NGNGデータ(クエリー結果)は同じ。だけど出力がケースによって違うみたいな
ときはどんなパターンを参考にすればいいのかな?
Javaで言えばBean(データ)とその加工。これに上手くマッチするパターンが
知りたい。先生よろしくお願いします。
0063デフォルトの名無しさん
NGNG生のInputStream と InputReader
みたいな関係
他にもいろいろあると思う
0064デフォルトの名無しさん
NGNGありがとうございます。
さっそく試して見ます。
0065デフォルトの名無しさん
NGNGそっすね。馬鹿が「ものの種類の分類」を
理性的に処理し損ねたときに、馬鹿継承が出現する感じ。
おまえら頭鍛えてから出直してこいってマヂ切れそうな昨今。
一度馬鹿が馬鹿設計で馬鹿継承をやると、
システムがその後にっちもさっちもいかなくなるんだよな。
#特に、既に稼動中のODBだとね(笑)。
#仕掛け的にSchema進化をサポートしてるといっても
#それはUSBなHDDを読み書き中に引っこ抜くのと同じなわけで…
006662
NGNGさっきはありがとうございます。
いろいろ納期が近いことも考えて、結局JSPの
<% page extends="xxx" %>
を使って継承させることにしました。でもこれじゃ設計もくそも
ないですね(藁
0067仕様書完璧
NGNG0068デフォルトの名無しさん
NGNGCでポリモルフィズムはできないぞ。
関数ポインタテーブル自作して、
それっぽいことやるしかないかな。
0069デフォルトの名無しさん
NGNGそそ。「クラス」という仕掛けを自作する羽目になるよね。
まぁ、却ってそのほうがヨイ場合もあるけど(笑)。
それって好きな仕様のOOP言語を自作しているようなものだから。
rubyのいいぶんじゃないが、わざわざデザパタなんて
言わなくてもさらりと実装できちゃうような言語仕様
ってのも、あるんで。
たとえばFactoryとかなんて、Classを値として扱える
(変数に代入できる)言語なら、パターンなんかじゃなくて
単にClassをやりとりするコードを1行かけば済むだけ。
パターンがパターンとして有意義になるためには、
前提とする言語仕様ってのが時折あるようだ…。
C++は史上一二を争うくらいに(笑)かちかちに硬い言語
なので、なにやるにしてもパターン(で紹介されるようなコード)
を引っ張り出さないとならないっていう面はあると感じる。
これは必ずしも嬉しいことじゃないようなきもする。
0070デフォルトの名無しさん
NGNG話ばかりが出るけど、プロトタイプベースの言語の話が
出ないのはなぜ?
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNGInstanceを作るとき、Classに作らせるってのが普通のClass有り言語のやり方。
そうじゃなく、既存Instanceをピーコすることで作るってのが、Prototypeな言語。
Objectに新しい機能を与えるために、普通のClassな言語では
Classに機能を追加してそれからInstanceを作らせるけど、
Prototypeな言語では、Classを経由せずInstanceに直接
メソッドを「追加」することになる。
なので、Instanceのメソッドを直接着脱する
「特異メソッド」という仕掛けが存在することが、前提。
rubyはClassも使える一方で特異メソッドも使える
という両刀使い(笑)の言語。
0073デフォルトの名無しさん
NGNG待ってました!
SELFとか、Cecilとか興味あります。
SELF環境のWin版ってないんですよね。さすがSunだ…
ソースはあるんだけど、誰かそこから移植orスクラッチから書けないかな?
0074デフォルトの名無しさん
NGNGPrototypeな言語の、利点、問題点等は特にないんですが?
007574
NGNG○ ないんですか?
0076デフォルトの名無しさん
NGNGOOPでもStrategyパターンとかPrototypeパターンすれば同じこと
のような気がするんだけど、気のせいですか?
0077デフォルトの名無しさん
NGNGunix畑の作物ならcygwin試しませう。どうですか?
>>74
実行時にClassを「いじる(=ピーコしたり中身を変更したり)」ことが
出来ない言語ってのはまぁ許せるけど、実行時にInstanceを
いじることが出来ない言語なんて論外なので(笑)、
メソッドディスパッチは自ずと動的なもののみになります。
C++みたいにコンパイル時に出来るだけ多くの事柄を確定
してしまおうという戦略は、成り立たない言語だと思います。
#俺が知らないだけか?
prototype型言語は、柔らかい系(笑)OOP言語の特徴を強く持っています。
それが利点&欠点かと。
あとは慣れじゃないですか?
ところでコンストラクタは意味をなさないと思われます。
Instanceをピーコして「から」そのInstanceに機能(メソッド)を
追加/変更していくというプログラミングスタイルになるので、
ピーコ(コンストラクト)した直後にはコレといった処理を行えまい。
たとえばFile型だからといって生成と同時にFileをOpenしてしまったら
File型から派生(実際はピーコ&メソッド修正)しようと思ったら
既にFileがOpenされてて手の付けようがない、ということもありそう(笑)。
#もちろん、そうならない文法を与えることも出来ないわけじゃないでしょけど。
あと、言語仕様が、比較的簡単になるんじゃないかなあ。
使いやすいかどうかは別として。
0078デフォルトの名無しさん
NGNG「OOPでも」って何ですか?(^^;;;;
PrototypeだってOOPだよー。
「(Classじゃなくて)おぶじぇくと」指向っしょ?
同じようなもんだといえばその通りなんだろうけど、
わざわざパターン(=教育)を使わずとも
言語デフォで普通に使えば(=本能)
そのままPrototype型になるっす。それが違い。
#CでもOOPできる、という論法と似ています。
0079デフォルトの名無しさん
NGNGたとえばコンストラクタという機構はおおむね存在しない。そもそもクラスという機構が無いのだから存在しようがない。
オブジェクトを作るのはとても簡単だ。RubyやPerlのハッシュコンストラクタみたいな感じの構文で新しいオブジェクトを作ることが出来る。必要ならば、新しいオブジェクトを生成して返すメソッドなどを用意すれば、それがコンストラクタ的なメソッドという事になるのである。
継承に至っては、単に親オブジェクトへリンクを張るというだけに成り下がる。特殊なメンバ(prototypeとか_protoとか)に親オブジェクトへの参照を入れればそのオブジェクトを継承することが出来る。いや、むしろ自分で処理できないメッセージが来たときに、親にそれを委譲できるという表現の方が適切かもしれない。
ここで重要なことがひとつある。それは、親オブジェクトの状態は(明示的に行わないかぎり)決してを書き換えられないということだ。
たとえば親と子の両方がfooというデータメンバを持っているとしよう。子オブジェクトにbarというメッセージが送られた結果、親オブジェクトのbarメソッドが呼びだされ、データメンバfooを書き換えた。この場合、どちらのfooが書き換えられるかというと、子オブジェクトのfooなのだ。
つまり、親オブジェクトは子オブジェクトの原型、プロトタイプなのである。プロトタイプは決して変化しない。ここがプロトタイプベースと言われるゆえんなのではないかと思われる。
ちなみに大抵のクラスベースの言語では親オブジェクトの方になる。これはデータメンバはオーバーライドできないという制限があるためだ。
0080デフォルトの名無しさん
NGNGあ。意識していなかったけど、最近作って遊んでる自作言語は
いつのまに自然に(笑)そんなふうに振る舞うようになっています。へい。
なるほど。「書きかえられないからプロトタイプ」か。肝に銘じて(謎)おきます。
>これはデータメンバはオーバーライドできないという制限があるためだ。
データメンバとメソッドメンバの仕掛けも意味付けも
ずいぶん違うんでしょうね。データはObjectにつくけど
メソッドはClassについているのが普通だから。
自作言語では、面倒なので(笑)出来る限り同一視できるように
作ろうと心がけた結果として、上記の状態に至りました。
「初期値」としてプロトタイプ側Objectに
テキトウなデータメンバを用意しとく
というテクが使えるんですねこれ。面白い。
ところでClassていつから有ったんでしょうか?
Smalltalkには有るし。
全然知らないんですがOOP始祖のSimulaとやらには
有ったんでしょうか?大昔のシミュレーション言語ということは
がちがちコンパイル系言語でClass有りだったのだろうか?
0081デフォルトの名無しさん
NGNGSimulaにはあったと思う。Hoareの昔の論文を読んだときに
例がSimulaで書かれていたので、へー、と思ったことがある。
当時はその筋ではそれなりに知られていたのかもね。
0082デフォルトの名無しさん
NGNGってなんだそりゃ、と思ったけど、インスタンスの、親クラスから
継承した部分にあるメンバ変数のことね。
っていうかその部分の事を指して「親オブジェクト」って言うのは
変だぞ。
subobjectって表現なら論文で見たことあるけどな。
でもこれは subclassと subobjectの関係が逆になって
混乱する人も居るだろうな。
0083デフォルトの名無しさん
NGNG書き換えられているのは親じゃなくて自分のデータメンバだと見ることもできるよ。
つーよりすべてのデータメンバは自分に属していて、親は完全なプロトタイプとみ
なすことができる
#普通の言語の場合、親はオブジェクトじゃなくてクラスなんだから当たり前
0084デフォルトの名無しさん
NGNG自作言語の名前はなんていうのでしょうか?
0085デフォルトの名無しさん
NGNGジサクジエンデシタ
0086デフォルトの名無しさん
NGNGそれを信じるならば(笑)、自分を攻撃したくない(笑)んで、まぁ…
0087デフォルトの名無しさん
NGNG初期化済みのオブジェクトをテンプレートとしてROMに置きつつ、
変わった部分だけ保持するインスタンス、なんかが特徴的でした。
0088デフォルトの名無しさん
NGNGぜってー禁止!つーことでみなさんよろしく。
0089デフォルトの名無しさん
NGNGでもコンストラクタの構文があるんで、クラスベースな感じでも使えるんよ。
0090デフォルトの名無しさん
NGNG0091ITファシズム
NGNGその行政を、ITで、機械的に実現するのが現実的です。
情報は、いくら集中させてもかさばりませんし、
少人数で握っていた方が、力となります。
こうなるには、膨大なソフトウェアを必要としますが、人手が必要なのは、
案件を、開発し尽くして、安定した運用に入るまでです。
これを可能とするには、より統制された開発手法で、
すべてのもの(人、物、金、情報)を管理していく
アプローチをエンジニアにとらせなくてはなりません。
しかし、真の目的を知って、協力する人は、多くはありません。
そこで、「すべてのもの(人、物、金、情報)を管理」という用語を
「開発対象(オブジェクト)」という抽象的な概念に置き換え、
エンジニアの頭を混乱させて、彼らを、JとCとで始まる2つの言語の競争へ
参加させることにしました。
これらの成果物は、テロ等によって、簡単に破壊されないように、
蜘蛛の巣の構造をとっています。
巣が少々破壊されても、すぐに修復する蜘蛛に、学んだのです。
ITファシズムが完成するのは、数10年を要するかも知れませんが、
ご破算になる可能性も、極めて、稀有という状況であります。
0092デフォルトの名無しさん
NGNG3行で要約しろ
0093デフォルトの名無しさん
NGNGそうかな?
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNG権限委譲された水平分散型の組織、を思い出すね。あと妖精崇拝的、とか
コビトさんお願い思考な気も。
00972ch風端的
NGNG少なくとも他人からはそう見えるようにやっとけ、ヴァカ!
日本人なら日本語しゃべれや、ギコハハハハ!
ってこった。
0098デフォルトの名無しさん
NGNG何気にわかりやすい。
0099デフォルトの名無し
NGNG触らせないことです。
0100デフォルトの名無しさん
NGNGみせちゃうことです。
0101shige
NGNG0102デフォルトの名無しさん
NGNG>>1 の質問は Object-Oriented Paradigm とは、でしょ。
だったら答えは、
「対象とする事象を "もの" という単位で観測することで、
抽象化・具象化時の traceability を容易に保証可能とする考え方」
じゃないかなあ。
OO Language や OO Programming の話ではないはず。
0103102
NGNG元の対象とする事象 と それを認知した頭の中の model との間、
頭の中の model と それを自然言語で記述したもの との間、および、
自然言語で記述したもの と それを Programming Language で表現したものとの間
での traceability を指している。
開発段階間での traceability 、UML 中の diagram 間の traceability も
あるけどね :-P
#最初の tracebility は 要求段階と分析段階間のそれと言えなくもないか 8-)
0104102
NGNG例えば、
「観測者が主体性があると認識した全ての対象間の1対1写像が存在すること」
という、あやしげな叩き台をここに提示する。
0105KD
NGNGこの機構を使って、既存のコードの変更点をできるだけ少なくするのが目的。これが肝心。
ほかにも、継承使ってラクチンするとか、関数よりは、メソッドの方が機能が整理されていて分かりやいとか、カプセル化しやすいとかあるのですけども。
0106KD
NGNG0107
NGNG0108デフォルトの名無しさん
NGNG「Polymorphism がなくても、Implementation Inheritance があれば、
それは Object-Oriented と呼ぶことができる。」
てな定義はありませんでしたっけ?
0109デフォルトの名無しさん
NGNGencapsulation, inheritance, polymorphism になってます。
http://c2.com/cgi-bin/wiki?ObjectOrientedProgramming
http://c2.com/cgi-bin/wiki?ObjectOrientedPurity
でも、単に Object-Orientation としては、
object と message passing にしか触れられてませんね。
http://c2.com/cgi-bin/wiki?ObjectOrientation
Object-Oriented FAQ でも、
high-level view では、polymorphism が挙げられていますが、
low-level view では、object を基本とした "View Of The World" となっとります。
http://www.cyberdyne-object-sys.com/oofaq2/
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています