質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

181閲覧

C#のプログラム構成について一旦整理

shinyakita

総合スコア39

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

2クリップ

投稿2017/11/22 14:22

C#の入門書を進めていくうちにオブジェクト指向のチャプターで引っかかってしまい。
用語と関連性がぐちゃぐちゃになってしまいました。
ブログで一旦整理してみたのですが、概要としてこれで合っているのか?不安です。
C#の肝であるオブジェクト指向の考え方はしっかり押さえておこうと思ってます。

https://papaprogram.blogspot.jp/2017/11/c.html

ご指摘があればご教授頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

クラス 液晶
メソッド カラー液晶 42インチ

質問者の方のブログを拝見しましたが、
上の部分、とくに「42インチ」は、
「メソッド」というよりは、
「フィールド」にした方が適切だと思いました。

「映像を映す」という振る舞いがメソッド
「42インチ」という属性がフィールドです。

一般的な目安として、動詞がメソッドで、名詞がクラスやフィールドになります。
(ただし、仕様の動詞を抽出すれば、機械的にメソッドを設計できる、というほど単純ではない)


しかし、用語が大事というよりは、用語に反映された考え方が大事です。

オブジェクト指向では、オブジェクトを単位にしてプログラミングしていきます。
この「オブジェクト」とは何かというと、たとえば「対象」といった訳語があります。

だから、対象中心の考え方です。対比すると、処理中心ではありません
フローチャートの世界から、UMLのクラス図の世界へ、頭を切り換える必要があります。
具体的にコード中では、IF文の代わりにポリモーフィズムで分岐を表現したりします。

そうすることで何がしたいのかというと、
人間が使う言葉に近づけていくことで、変更容易にします。

たとえば、処理を中心に考えると、組みやすいが、変えにくくなります。
変更時に、どこにデータがあるのか分からないからです。

とくに大規模になるほど、書くより探す時間の方が長いです。
十万行から探して、十行直す、みたいな感じだからです。

たとえば、「42インチ」を変えたいとき、どこを探せばいいのかといえば、
液晶の大きさなのだから、液晶クラスを探せばいい、とすぐ分かるわけです。
こうして、クラスを使って(カプセル化することで)、
変更箇所がコード全体に散らばることを防ぎます。


本格的なオブジェクト指向(分析/設計/開発)を習得するのは難しいです。
IF文やFor文が中心の、手続き的なプログラミングに慣れたのと、
同じかそれ以上の時間が掛かるでしょう。

それでも、学ぶだけの価値があると感じます。
変更が楽、デバッグやテストやエラー処理が楽になるからです。
ぜひ、本腰を入れて、じっくり学んでください。

投稿2017/11/22 21:23

LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shinyakita

2017/11/22 23:58

ありがとうございます。 大変わかりやすい説明で助かりました。 オブジェクト指向は何でわざわざこんな面倒な事をするのだろうか? 普通に上流から順に処理していけばできるのでは?と思っているのはまだ入門書で複雑な処理をするわけでもないからでしょうね。 この返答頂き、一つのアプリケーションでいくつもの機能をもっていて相互関係もあるような場合、どこを修正するのか探すのが大変ですね。 私の目的はデータベースアプリケーションを作りたいと思って初めましたが、オブジェクト指向つまりC#の言語構造を覚えないと単に構文だけ覚えても実際は作れないのでは?と思い。 入門書のたかが1章で1週間かかってます。 昨日、備忘録としてブログにまとめていたところ全く理解できなかったところが少しわかりかけたような気がします。 入門書のサンプルコードを見てどういう動きをするのか少しわかってきました。 LLman様のご回答でさらにわかったような気がします。
shinyakita

2017/11/23 01:57

クラス 液晶 42インチがフィールドだという事が理解できました。 将来的に50インチに変更になった場合変数だけを変更すれば良いという考え方ですね?
LLman

2017/11/24 08:08

>オブジェクト指向は何でわざわざこんな面倒な事をするのだろうか?  やや作りにくくなりますが、だいぶ直しやすくなります。 >普通に上流から順に処理していけばできるのでは?  直すときに上から順に読んでいきたくないわけです。  ひとつのクラスだけ読めば済むようにしたい。  またGUIだと、イベントドリブンなので、  ボタンを押すことなどから処理を始め、  逐次で一直線に処理できなくなってきます。 >将来的に50インチに変更になった場合 >変数だけを変更すれば良いという考え方 その変数があるクラスだけを変更すればよい、という考え方です。 たとえばグローバル変数だと、コード全体に散らばるので変更しにくい。 なるべくひとつのクラスに閉じこめるのがカプセル化です。
shinyakita

2017/11/24 15:56

はい。なんとなくわかってきました!! ありがとうございます。 カプセル化しないとどこに散らばっているのか?探すだけで途方に暮れそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問