ユビキタス世界までの道の駅

アウトドア派のプログラミング奮闘記

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  130  : 記事  0  : コメント  1518  : トラックバック  8

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

姉妹ブログ

構造体(Structure)とクラス(Class)です。

いろいろな入門書にクラスのことが載ってますが、

超初心者の本に構造体まで載っていないような・・・

 

スタティックであるか、インスタンスを生成しないと使えないだとか、と言われてもピンとこないのです。

クラスの説明は、

おぎわらさんの本「作って覚えるVisualBasicExpressEdition」

http://blogs.wankuma.com/ogiogi/archive/2007/02/24/63897.aspx

に、わかりやすくクッキーに例えてクラスの説明がありました。

(私にはわかりやすかった。)

 

構造体もあんな感じで書いてあるとわかりやすいんですが・・・

 

 

自分自身では測量に例えて理解しています。

 

「惑星」というクラスを作ったら、

そのプロパティに名前だの、長半径、と短半径、扁平率、などなど定義して、

「惑星」というクラスのインスタンスを生成して、

「月」や「地球」、「火星」などの名前や大きさをフィールドに入れてつくる。

 

「地球」という構造体を定義する場合、

測量法などで定められた、GRS80楕円体の定義値など、

後でこちょこちょ変えられたくない

または、コレと決めておきたいオブジェクトや変数として使用しています。

 

構造体は値型とクラスは参照型という特性で、

分けているだけなんですけど。

 

説明しろと言われたらうまく説明できないんですよね^^;

(脱却できてないやんけ・・・)

投稿日時 : 2007年7月10日 13:08

コメント

# re: 超初心者からの脱却(構造体とクラス) 2007/07/11 1:30 やまだ
クラスって、構造体の拡張では?
「惑星」という「構造体」には、半径や自転周期、公転周期などの値が入ります。で、具体的な値の入った「構造体」が地球だったりするわけですが。
で、「惑星」という「クラス」で何が違うかというと、「自転する」とか「公転する」とかの処理(動き)が追加されているわけですな。
#その辺のことは、来月の勉強会でかるぼさんが説明してくれるかも?
「クラス」と「オブジェクト」は容れ物と実体で言葉がわかれているのに、「構造体」はその辺の使い分けがないから混乱のもとなのかもしれませんね。

# re: 超初心者からの脱却(構造体とクラス) 2007/07/11 9:22 Zee
#その辺のことは、来月の勉強会でかるぼさんが説明してくれるかも?
東京へはなかなか行けないですね^^;

# re: 超初心者からの脱却(構造体とクラス) 2007/07/11 12:56 やじゅ
構造体の拡張したものが、クラスと思えばいいです。
構造体には、メソッドとか定義できません。

最近、構造体よりSortedList型を使ってます。


# re: 超初心者からの脱却(構造体とクラス) 2007/07/11 13:13 とっちゃん
構造体(sturct)の拡張がクラス(class)なのは、Native C++ です。
.NET(C#) の class とは異なります。

.NET の型は、値型と参照型の2種類しかなく、そのどちらも、Native C++ では class と同じような感じとなっています。
#リテラルタイプとされている、System.Int32型 などにもメソッドがあるのはご存知ですよね?

値型と参照型の違いは、Native C++ でいえば、スタックに確保されるかヒープに確保されるかの違いとなります。

本質的なことを言えば、C# が値型の宣言を行うのに struct という語を使ってしまったのが過ちであるともいえますが、すでに出てしまってるので今さらですw

ここが、Native C++ から C# に移行する時のはまるポイントでもあるそうなので、きちんと押さえておく必要があります。

ちなみに、8月の大阪のトリのセッションはこのネタ(もっとディープ)です。
Native 中心になるので、.NET な話はほとんど出ませんがwww


# re: 超初心者からの脱却(構造体とクラス) 2007/07/11 18:18 Zee
>ちなみに、8月の大阪のトリのセッションはこのネタ(もっとディープ)です。
どこにも構造体の拡張がクラスと書いてなかったので、
頭がこんがらがるなと思っていました^^;

値型は、後で値を代入できない。
参照型は、インスタンスを生成していろいろな拡張や代入ができるってことで
解釈していたのですけど。

>ちなみに、8月の大阪のトリのセッションはこのネタ(もっとディープ)です。
いいネタフリになったでしょうか。(^。^)

# re: 超初心者からの脱却(構造体とクラス) 2007/07/11 20:30 とっちゃん
>>ちなみに、8月の大阪のトリのセッションはこのネタ(もっとディープ)です。
>どこにも構造体の拡張がクラスと書いてなかったので、
>頭がこんがらがるなと思っていました^^;

えっと、たぶん8月のセッション中では構造体とかクラスとか出てきませんw


>解釈していたのですけど
違います。
値型は、スタック上に実体がアロケート(確保)される変数の総称で、参照型は、ヒープ上に実体がアロケートされ、そこを指し示す値がスタック上にアロケートされる変数の総称です。
なので、C/C++ のポインタは Managed の 参照型と仕組みとしては同じものです。

本当なら、こういう話の前にさらに基礎的な部分として、プログラムが扱えるメモリとは何か?という部分からいかねばいかんわけですが...w
それをやると、1時間じゃ終わらない...というより1日あってもアロケータにたどりつけないw

ちなみに、変更できない(とされている)ものというのの代表としては、System.String 型があるわけですが、こいつは参照型で値型ではありません。
#ただし、動きそのものは値型のように見えるんで、かなり厄介な存在w

で、値型の代表格としてはSystem.Int32などの数値型があるのですが、こちらは任意のタイミングで任意の値に変更することができます。
なので、内容が変更できるかどうかと、どこにアロケートされているかは全く別の問題というより、次元の異なる内容だったりします。

>いいネタフリになったでしょうか。(^。^)
構造体とクラスとかその辺の話は...懇親会以降でw

えーっと、朝までやるか、夜で終わるかだけ決めてくれれば、帰る時間が確定できるので<おい!
#朝までやると確実に死ねますw


# re: 超初心者からの脱却(構造体とクラス) 2007/07/12 8:05 Zee
>値型は、スタック上に実体がアロケート(確保)される変数の総称で、参照型は、ヒープ上に実体がアロケートされ、そこを指し示す値がスタック上にアロケートされる変数の総称です。
なるほど^^;内部では棲み分けができているんですね。

>プログラムが扱えるメモリとは何か?という部分からいかねばいかんわけですが
個人的には興味がありますが、1日では飲み込めそうにはないですね^^;

>変更できない(とされている)ものというのの代表としては、System.String 型があるわけですが、こいつは参照型で値型ではありません。
こういう扱いが違うものがあるので、頭で整理しておきたいとこです。

基本的に超初心者から次ぎのステップに行くことを考えているので、
他に覚えないといけないことがたくさんありすぎます^^;
これも追々深めていくかな^^;

# re: 超初心者からの脱却(構造体とクラス) 2007/07/24 12:28 おぎわら
> クラスの説明は、
> おぎわらさんの本「作って覚えるVisualBasicExpressEdition」
> http://blogs.wankuma.com/ogiogi/archive/2007/02/24/63897.aspx
> に、わかりやすくクッキーに例えてクラスの説明がありました。
> (私にはわかりやすかった。)
>
ありがとーございますー(^^)

> 構造体もあんな感じで書いてあるとわかりやすいんですが・・・
このあたりは、他の方もかかれているよーに、
変数がメモリにどのように格納されているか?
を説明しないといけない
 -> 初心者にはややこしいかなー?
 -> ページすうも増えるとか大人の裏事情が(もごもご・・・)
というような背景によりボツになりましたー



# re: 超初心者からの脱却(構造体とクラス) 2007/07/24 15:32 Zee
おぎわらさんにコメント頂けるとは思ってませんでした^^

>変数がメモリにどのように格納されているか?
>を説明しないといけない
そうですよね。
次のステップに行く段階で、頭に入れておいた方がいいことだと思いますので、是非「作って覚える第2弾」を期待しております。
少なくとも私は買いますので^^


Post Feedback

タイトル
名前
Url:
コメント: