ハンガリー記法について

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ハンガリー記法について

返信@yu0627

by yu0627 » 2005年12月07日(水) 20:39

完全に余談w
私も先日初めて受け取り、その日一日中、頭の中はそればかりでした(笑)。
実のところ三通も来ています。うれしいです。
直接変換!?そんな便利なものが!?と慌ててDLさせてもらいました。
なるほど。再生しながら録音ですか。一般の方法なので、飛びついた分だけちょっとがっかり^^;
でも再生/録音開始のタイミングを気にしなくて良いのは楽ですね。
変換する際には使わせていただきます☆
直接変換は無理です。音階を記録するもの→音を記録するものの変換はすさまじいと思っています。
WAVファイルの記録方法を分析してMIDIファイルの音にして書き込む方法は...無理ですね。
これ作るのにかなり苦労しました。それなりに傑作です^^

Re: 返信@yu0627

by 淡幻星 » 2005年12月06日(火) 18:50

完全に雑談となってしまいますが・・・失礼して^^;
ちなみに私もリングは分かりません┐(´ー`)┌

余談にレスです→よって余談ですw≫yu0627さん
> あ、DLLの内部でクラスを使う方法がありましたか^^;それもそうですね。
内部で完結する例。実践コードモジュールのファイル読み書きクラスは、私がDLLでファイルに対して一定の処理をするときに楽をするために作ったのものですね。どうでもよいですが^^;

> 雑誌紹介許可申請が来たり
来ると嬉しいですよね~☆
私も先日初めて受け取り、その日一日中、頭の中はそればかりでした(笑)。

>MIDI→WAVするソフトについての質問が来たりで大変ですw
直接変換!?そんな便利なものが!?と慌ててDLさせてもらいました。
なるほど。再生しながら録音ですか。一般の方法なので、飛びついた分だけちょっとがっかり^^;
でも再生/録音開始のタイミングを気にしなくて良いのは楽ですね。
変換する際には使わせていただきます☆

返信@yu0627

by yu0627 » 2005年12月06日(火) 17:46

返信ありがとうございます。

>マティさん
ちょっとリングの話まで及ぶとわからないので...。
カーネルというのがOSの中核ということは知っていますが。

>淡幻星さん
あ、DLLの内部でクラスを使う方法がありましたか^^;それもそうですね。

余談
自分で公開しているソフトに雑誌紹介許可申請が来たりMIDI→WAVするソフトについての質問が来たりで大変ですw

うわw盛り上がっちゃいましたね^^;

by 淡幻星 » 2005年12月05日(月) 18:07

ちょっと目を離しましたら、びっくりの盛り上がりですね
Sinryowさん さんが書きました:スレッドの内容から外れてきているようにも思えますが,
すいません。私がオブジェクト指向の話に食いついたのが原因っぽいですね。覚えている最中なので、口出ししてみたかったんで、つい^^;
マティさん さんが書きました:使用する側から見ると、その通りだと思います。
あ、賛同いただけたw
オブジェクト指向を説明するときに、「こういえば分かりやすい」って満足できる回答に思っていたので、よかったです。おっしゃる通り、ユーザーがいかに楽をするか、って方法論ですよね。
イグトランスさん さんが書きました:ちなみに世間的にはこんな感じのようです。
さすがはWikipedia。がっつり載ってますね。
たしかな資料をありがとうございます♪
途中で読むのを放棄しましたが(爆)。
yu0627さん さんが書きました:DLLに関しては今までと同じ構造化スタイルでやっていこうと思います。
オブジェクト指向はDLL以外のプログラムで使いたいと思います
ども。最近オブジェクト指向バンザイになってきている、覚えたての初心者です。仲間ですかな?w 覚えたものは使ったみたいじゃないですか(笑)。
ちなみに、DLLであっても、内部で完結する処理に関してはクラスを使うのが便利だと思います。外部とやり取りする部分は関数で。まぁ、Sinryowさんがおっしゃってるように何でもかんでもクラス(~オブジェクト指向)にする必要はないですけど。いい所取りで楽に組んでいきましょうよ♪


蛇足。
先日c++で窓作成&プロシージャをクラス化してみました。
まぁMFCのCWndクラスのまねごとになるんですけど、便利ですw
窓作成がプロシージャまで含めて数行で終えられれます。
ABでもそんなクラスがあれば、Ver2.x時代(window+GetMsgWnd?)からの移行が楽になるんじゃないかと。誰か作ってくれないかな~w(マテ。 ・・・先ず隗より初めよ?時間あったら移植してみようかな(^^;)

ドライバがリング0になっていること

by イグトランス » 2005年12月03日(土) 10:14

ところでNTでドライバがリング0になった理由には,
他のCPUへの移植を考えたためという話も聞いたことがあります。
これはx86の特権レベルに当たるものがものによっては,
2段階しかないというCPUもあるからということらしいです。

それとマティさんの書いた高速化やその他諸々の理由があって,
NTのドライバはリング0で動かすことにしたのでしょう。

by マティ » 2005年12月02日(金) 23:42

もう恥を書くのは止めようと思いましたが、自分の現役時代の逸話だけ書いておきます。
WinAPIもオブジェクト指向になっているとイグトランスさんも書いていましたので便乗です)

むかーし昔、MicrosoftOS/2に負けない本格的なOSを作成する必要がありました。
その為に、DECから引き抜いたデイブ・カトラー氏(OS開発の第1人者?)のチームにWindows NTの開発をお願いしました。そのOS(NT3.51まで)の構成は、カーネルがリング0、ドライバーがリング1、アプリケーションがリング3となっていました。
NT3.51までは理想的なOSの構造です。Win9x系&NT4.0以降はカーネル&ドライバーがリング0、アプリケーションがリング3なのでドライバーがこけるとOSも死にます)

NTを開発する際、ドライバーを含めてOSはC++で開発するようにビル・ゲーツ氏より指示があったようですが、デイブ・カトラー氏はOSの中核部分のC++化に猛烈に反対しました。NTで全面的にC++で書かれた唯一のドライバーは(OSの中核として認識されなかった)ディスプレイドライバーだけでしたが、画面の描画がWin9x系に比べてものすごく遅く、WinNTはシステムが重過ぎると不評を買ってしまいました。
(その当時、Win9xより極端に遅かったのは、ディスプレイドライバーだけですが、ユーザが一番遅いと感じるのも画面表示ですよね!)

その後、NT4.0で性能を改善しますが、ドライバーをリング0に引き上げることにより見かけ上の性能改善を行いました。
・性能と引き換えに安定性を放棄したと言います。
・なぜドライバーをリング0にすると性能が上がるかは、リクエストがあればお答えします。

余談
WinAPIもオブジェクト指向なら、実装はどうであれDLLは(データと手続きを一体化して保持している存在なので)オブジェクト指向となりますよね!

ここからは愚痴
愚痴を書こうかなって思いましたが、ABは建設的に行きましょう!

返信@yu0627

by yu0627 » 2005年12月02日(金) 22:33

> もしDLLからクラスを外部に公開したいと言うのであれば,現在のABでは不可能です。
> やるとしたらWinAPIのようにハンドルとそれを操作する関数を公開するという形になります。
>
> 逆に言えばオブジェクト指向言語の機能を使っていないだけであって,WinAPIもオブジェクト指向になっていると言えるのです。
 そうなんですか。
 あのあと自分でやってみてよくよく考えてみたらDLL内のクラス内の関数を園に出すのは難しいのがわかりました。
DLLに関しては今までと同じ構造化スタイルでやっていこうと思います。
オブジェクト指向はDLL以外のプログラムで使いたいと思います。

 ご返信ありがとうございます。

DLLのクラス

by イグトランス » 2005年12月02日(金) 21:56

もしDLLからクラスを外部に公開したいと言うのであれば,現在のABでは不可能です。
やるとしたらWinAPIのようにハンドルとそれを操作する関数を公開するという形になります。

逆に言えばオブジェクト指向言語の機能を使っていないだけであって,WinAPIもオブジェクト指向になっていると言えるのです。

Re: 返信@yu0627

by NoWest » 2005年12月02日(金) 21:35

>  確かに難しく考えすぎでした。「Class」内でメンバ関数およびメンバ変数を定義し、「Private」はそのクラス内だけアクセス可能なもの、「Public」はプログラム内のどんなところからでもアクセス可能ということですね^^
> あとはこれをどのように利用していくか...。自分でいろいろとやっていきたいと思います。
そうです。
とにかくチャレンジしかありません。

オブジェクト指向が難しく感じられるのはポリモーフィズムとかインヘリタンスとかカプセル化とか初めて聞いた人がよく分からないようなものがオブジェクト指向が持つ特徴だとか思われていることです。
 確かにそうだといえばそうなのですが、それらは「データと手続き」を一緒にまとめるという根源的な仕組みがもたらした副産物ですから、今それを使いこなす必要はありません。最初は「変数と関数が1つに収まってる便利な機能」ぐらいの理解で十分です。


> #あ、クラスってもちろんDLL内でも使用可能ですよね!?
>

勿論使用できます。

ただし、COMコンポーネントのようにDLLからオブジェクトを外に出すのには一工夫必要ですが。。。

返信@yu0627

by yu0627 » 2005年12月02日(金) 20:21

2つを比較すると構造化では関数の引数が構造体なのですが
オブジェクト指向ではクラスが関数を呼び出してますよね。
 NoWestさん、サンプルソースを使っての詳しい説明ありがとうございます。自分でやってみて大体理解できました。
 確かに難しく考えすぎでした。「Class」内でメンバ関数およびメンバ変数を定義し、「Private」はそのクラス内だけアクセス可能なもの、「Public」はプログラム内のどんなところからでもアクセス可能ということですね^^
あとはこれをどのように利用していくか...。自分でいろいろとやっていきたいと思います。

#あ、クラスってもちろんDLL内でも使用可能ですよね!?

【追記】
 今回ソースを見てかなりオブジェクト指向の意味が分かるようになりました。
オブジェクト指向第一弾としてDLLを作ってみようと思います。

Re: 返信@yu0627

by NoWest » 2005年12月02日(金) 19:44

やはり難しいですね...。オブジェクトはこの説明文を見ると”箱”ですかね。
> 外から入ってきたメッセージを内部で変換して自分の”箱”の種類(?)を変更したりほかの”箱”にメッセージを送る。
> そして、その”箱”が集まったものがプログラムですかね...。
そんなに難しいとか考えなくても良いですよ。

 そもそもオブジェクト指向というのは構造化プログラムと同時期に生まれていましたが、構造化プログラミングと全く異なる考え方ではありませんので今も昔も対立しているわけではありません。
 ただ、構造化プログラミングが「情報は情報、手続きは手続き」でそれぞれ別にまとめようと考えたのに対し、オブジェクト指向は「情報とそれを扱う手続き」を1つにまとめようと考えただけです。

とにかく試してみるのが一番ですよ。

コード: 全て選択

#N88BASIC

' ↓ ここからプログラムが実行されます

/* 構造化 */

Type MYDATA
	Age As Long
	Name[255] As Char
End Type

Sub InputAge(ByRef dat As MYDATA)
	Dim s As Long /*バグなのかINPUTで構造体のメンバに値が入力されない*/
	Input "年齢を入力してください。 >",s
	dat.Age=s
End Sub

Sub InputName(ByRef dat As MYDATA)
	Dim s As String
	Input "名前を入力してください。 >",s
	lstrcpy(dat.Name,StrPtr(s))
End Sub

Sub PrintMyData(ByRef dat As MYDATA)
	Print "名前 ",MakeStr(dat.Name)
	Print "年齢 ",dat.Age
End Sub

Dim MyData As MYDATA

InputName(MyData)
InputAge(MyData)
PrintMyData(MyData)

コード: 全て選択

#N88BASIC

' ↓ ここからプログラムが実行されます

/* オブジェクト指向 */

Class CMYDATA
Private
	Age As Long
	Name[255] As Char
Public
	Sub InputAge()
		Input "年齢を入力してください。 >",Age
	End Sub

	Sub InputName()
		Dim s As String
		Input "名前を入力してください。 >",s
		lstrcpy(Name,StrPtr(s))
	End Sub

	Sub PrintMyData()
		Print "名前 ",MakeStr(Name)
		Print "年齢 ",Age
	End Sub
End Class

Dim MyData As CMYDATA

MyData.InputName()
MyData.InputAge()
MyData.PrintMyData()

2つを比較すると構造化では関数の引数が構造体なのですが
オブジェクト指向ではクラスが関数を呼び出してますよね。

つまり、
「あんなふうに、こんなふうにしなくてはいけない」というのがオブジェクト指向ではありません。
「どのような見かたでどのようにプログラムを分割したか」です。

※もちろん、このようにした方が良いというな定石は既に完成されつつありますが、オブジェクト指向そのものが完璧ではありませんのでアスペクト指向などの新しい手法がオブジェクト指向の上に構築され、問題も補完されつつあります。しかし、それ自体も完璧ではありませんので、結局の所プログラマの腕次第という所です。
兎に角、慣れなのでぜひ挑戦してみることをお勧めします。

返信@yu0627

by yu0627 » 2005年12月02日(金) 17:53

スレッドの内容から外れてきているようにも思えますが,あえて。
確かに外れてきていますよね...。(ハンガリー記法→オブジェクト指向)
オブジェクト
オブジェクト指向においては、データと手続きを一体化して保持している存在。オブジェクトは、外部からのメソッド呼び出しでメッセージを受け取り、内部で処理を行い、他のオブジェクトにメッセージを送ったり、自己の状態を変更する。オブジェクトが集まったものが実行プログラムになる。
オブジェクト指向
オブジェクト指向とは、オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方である。
やはり難しいですね...。オブジェクトはこの説明文を見ると”箱”ですかね。
外から入ってきたメッセージを内部で変換して自分の”箱”の種類(?)を変更したりほかの”箱”にメッセージを送る。
そして、その”箱”が集まったものがプログラムですかね...。

by Sinryow » 2005年12月02日(金) 02:11

スレッドの内容から外れてきているようにも思えますが,あえて。

私の個人的な捉え方ですが
オブジェクト指向プログラミングが必要なのは(=私がクラスを用いるのは),動作(メソッド)の制御するところとならないところで,変数が書き換えられないことが保証される必要がある場合と考えています。
そうでなければ,例えば変数だけが必要なら構造体でよいですし,(変数と連動しない)関数だけが必要なら単に関数宣言をすればよいのですから。
※逆に言えば,私はカプセル化が必要ない時は基本的にクラスを使っていないということです

あと,マティさんがおっしゃっている「ユーザが引数にどのような型でパラメータを指定しても処理を行える」ということは,Wikipediaの「オブジェクト指向 - 背景」の項にありますが,Smalltalkの設計思想がそれにあてはまるそうです。(この辺りの考えは,一部ですがJavaにもあると思います。)
しかしそのような考えは,C++なんかだとテンプレートとかオーバーロードの扱いになるので,それをオブジェクト指向とみなすのはどちらかといえば現在の主流ではないような気がします(完全に根拠はありませんが)。
2005.12.3 0:42 「オーバーロード」を追記。

【余談】
最近Perlのオブジェクト指向プログラミングに挑戦してます。興味がある方,いろいろ話し合いませんか?
(ここでやると迷惑になるので,私のサイトの掲示板でお願いします。)

by マティ » 2005年12月01日(木) 22:55

すみません。私が話をゴチャゴチャにしていました。
イグトランスさんに紹介を頂いたホームページには、以下の用語の説明もありました。
オブジェクト
オブジェクト指向においては、データと手続きを一体化して保持している存在。オブジェクトは、外部からのメソッド呼び出しでメッセージを受け取り、内部で処理を行い、他のオブジェクトにメッセージを送ったり、自己の状態を変更する。オブジェクトが集まったものが実行プログラムになる。
オブジェクト指向
オブジェクト指向とは、オブジェクト同士の相互作用としてシステムの振る舞いをとらえる考え方である。

by イグトランス » 2005年12月01日(木) 21:39

ちなみに世間的にはこんな感じのようです。

オブジェクト指向プログラミング - Wikipedia
オブジェクト指向プログラミングとは相互にメッセージを送りあうオブジェクトの集まりとしてプログラムを構成する技法である。
さらに本文を読み進めていくと上記メッセージ送信ともう1つ、
C++の抽象データ型のスーパーセットという定義もあると書いてありますね。

ページトップ