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

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

新規登録して質問してみよう
ただいま回答率
85.48%
アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

デザイン

プログラミングでのデザインとは、プログラムの構成や、使用の信頼性・持続性・正確性・利便性の目標達成にはどうするのがベストなのか特定の選択を行うことです。

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

Q&A

2回答

1670閲覧

【オブジェクト指向】【アーキテクチャ】違いって?

ttt

総合スコア1

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

デザイン

プログラミングでのデザインとは、プログラムの構成や、使用の信頼性・持続性・正確性・利便性の目標達成にはどうするのがベストなのか特定の選択を行うことです。

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

0グッド

1クリップ

投稿2021/10/28 00:00

【デザインパターン/設計パターン】
【ソフトウェアアーキテクチャ】
【オブジェクト指向】
【SOLID原則】

大雑把にまとめると、これらは全て、
「守って設計すると、コードの再利用がしやすい/コード変更の際、お手軽」
みたいなことだと認識しているのですが、それぞれ違いはあるのでしょうか。

または、認識が間違っていますでしょうか。

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

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

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

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

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

Zuishin

2021/10/28 00:01

間違っています。
dodox86

2021/10/28 01:50

> みたいなことだと認識しているのですが、それぞれ違いはあるのでしょうか。 言葉が違うということは指し示しているものやその領域が違うことがほとんどですが、なぜ違いが無いと思えるのでしょう。質問の気軽さに比してちゃんと答えようとすることの費用対効果を考えてみませんか。
m.ts10806

2021/10/28 02:11 編集

カテゴリや領域、階層が違うものを比べるのは間違っています。 「スポーツと野球の違い」を聞いてるようなものです。
guest

回答2

0

「ダイコン」
「ニンジン」
「ハクサイ」
「ホーレンソウ」
大雑把にまとめると、これらは全て、「野菜」というものですが、違いはあるのでしょうか。

と聞かれてるのと同じで、意味不明ですよ.

それぞれ説明することはできるでしょうけど(ぐぐれ、ってはなしですわな)
それがあなたの求めてることなんでしょうか。

投稿2021/10/28 00:07

編集2021/10/28 00:11
y_waiwai

総合スコア87774

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

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

0

検索すればわかるはずなんだが…(ざっくりとしたものであれば趣味&独学の私ですらわかっているのに)

「守って設計すると、コードの再利用がしやすい/コード変更の際、お手軽」

ある意味、正しい。ただし、後半部分の『お手軽』はまったくの間違い。
(自分で考えるよりは楽だが)

ただ、それぞれ方向性が違うのです。

まずデザインパターン。
これはGoFだったかな。とある方々が考えた手法です。
データ構造とアルゴリズムとかのように、先人たちの知恵です。

『俺はこういう局面ではこういう風に切り抜けたぜ』という情報です。
これを学んで、発想力というかそういうのを学ぶのです。
だから、常に使えるわけではありません。
実際、(初期の?)デザインパターンではSingletonパターンがありますね。
でもこれを多用しすぎると、ある意味C言語よりも使いづらい状態になります。
1クラス で 1オブジェクト しか作れません。もしWindows APIとかみたいなのをラップしてボタンクラスとかを作ると考えてみてください。
普通、市販のソフトとかにはボタンがいくつもありますよね。ボタンだけじゃないですが。そうなると、ボタンの数だけクラスを組まないといけないです。

なので今ではアンチパターンとなっているようです。
このように、必ずしも使い勝手がいいとは言えません。

ただし、オブジェクトの運用方法は学べますよ。

ソフトウェアアーキテクチャ… あまり詳しくありませんが、ざっと調べると、MVCパターンとかのようなやつのようですね。

これはある意味、設計におけるデザインパターンのような感じでしょうか。
デザインパターンはオブジェクトの運用方法(どのようにオブジェクトを生成し管理するか)で、ソフトウェアアーキテクチャはUIとビジネスロジックの分離等のような設計におけるものっぽいです。

オブジェクト指向(OOP)はあくまで発想法です。

プログラミングの歴史を考えるとわかりますよ。

まず、プログラミングは最初、軍事利用でした。弾道計算や暗号解読とかです。
でも機械は0と1からなる機械語しか認識できません。でも人間にはきつい。ってことで、アセンブラのような言語が作られました。でも、似たような処理も今で言うコピペやgotoの乱用でいわゆるスパゲティコードになっていることが多かったようです。

そこで、手続き型プログラミングと呼ばれる手法、つまり関数にまとめたりして考える方法が生まれました。C言語とかがそうです。でも、これにもデータと処理(関数)は別々で、たまたまそれを処理するだけでした。プログラマがデータの状態を完全に意識しないといけません。

そこでオブジェクト指向プログラミングというのも考えだされました。
手続き型で問題となっていた『データと処理が別物』の部分を解決しました。

データ(= フィールド)と処理(= メソッド)をひとまとめにしたオブジェクトなるものを中心に見る発想法です。これにより、『データと処理方法はオブジェクトが知っている』という状態になりますね。それは言い換えると『オブジェクトだけが対象データと処理方法を知っている』という状態です。つまり『オブジェクトに処理や管理を任せる』のです。

でもOOPにも問題があったので…という風に試行錯誤しながらできた手法です。

確かに自分一人で開発する場合はあまり旨みが感じられないかもしれません。
ですが、C++でいうBoostやQt、JavaでいえばPOIのような外部ライブラリを使うと考えてみてください。ファイルの読み込みを考えても、『今ファイルのどこを指し示しているか』とかのような部分は意識しないはずです。(バイナリファイルとかだと意識する必要がある場合が多いが)

SOLID原則…DRYの原則とかもあった気がしますが。これらは上記OOPを実現する上での指標です。
従わなくても実装自体は可能です。ですが、それならいっそ手続き型のほうがましっていう状態になりやすいからです。

たとえばメソッドをやたらstaticにしたりとか、いわゆる神クラスっていうやつになったりとか。

単一責任の原則は『1クラスにつきひとつの責務だけ与えよ』的なやつですね。
従わない場合、例えばファイルの読み書きをする『FileManager』なるクラスを作ったとします。
でも一ヶ月後の自分は覚えていません。
それで『これもファイル操作だから』と削除系やコピー系の処理も加える。
そうするとクラスが肥大しますね。

で、なにかファイル関連があったらFileManagerへ。
という風になってしまう。
そうすると、OOPの基本概念である『オブジェクトに管理や処理を任せる』ということができなくなってしまいます。

これではダメだということで、単一責任の原則とかを課しているのです。

他の原則も似たような感じです。
『同じような処理を書くな』→クラスなり関数なりで切り出して使え
的な。

よってそれぞれ方向性が違います。

投稿2021/10/28 01:16

編集2021/10/28 01:38
BeatStar

総合スコア4958

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問