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

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

新規登録して質問してみよう
ただいま回答率
85.35%
オブジェクト

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

オブジェクト指向

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

2回答

1391閲覧

オブジェクトと関数の違いについて

turtle410

総合スコア13

オブジェクト

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

オブジェクト指向

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/08/10 07:08

前提・実現したいこと

オブジェクトと関数の違いは何ですか?また、オブジェクト指向は「いかに効率良く開発を行うかを突き詰めた考え方で、プログラムを分かりやすく効率的に書くコードの書き方」という意味で合っていますか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

maisumakun

2021/08/10 07:13

言語は何を前提としていますか?
itagagaki

2021/08/10 07:16

推察ですが、質問者が聞きたいのは「手続き型プログラミング」と「オブジェクト指向プログラミング」の違いかな?質問者は「オブジェクト指向プログラミング」のことを「オブジェクト」、手続き型プログラミングのことを「関数」と言っているんじゃないかという気がします。他に「関数型プログラミング」というものもあるのでややこしいですが。
mather

2021/08/10 07:39

> オブジェクトと関数の違いは何ですか? 「オブジェクト」「関数」といった用語は言語によって意味が変わることがあります。 具体的にどんな言語や実装で理解できないのか書いてください。 > また、オブジェクト指向は「いかに効率良く開発を行うかを突き詰めた考え方で、プログラムを分かりやすく効率的に書くコードの書き方」という意味で合っていますか? おっしゃられている「効率良く、効率的に」という言葉の意味が曖昧です。 「少ないコードで他の言語と同じことが実現できる」とか「パフォーマンス効率が良い」とか、どういうときに「効率が良い」かは具体的に記載しないとわかりません。
m.ts10806

2021/08/10 07:50

疑問の出どころや動機を知りたい。
m.ts10806

2021/08/10 07:52

あぁ、未解決放置のまま質問編集する気もない解決する気のない人だったか。
guest

回答2

0

itagagakiさんの仰るように、いろんな意味にとれるのと、私自身は趣味でやっているので適切な回答はできないですが、それでもいいなら。


まず定義として、言語はC++とします。(この時点ではまだ言語が定義されていないため)

オブジェクト、関数とこの二つが一気に出てくる言語ってC++とかなので。


まず、オブジェクト指向は……とかの前に、プログラミングの歴史を学びましょうか。
これがわかっているか、わかっていないかで相当違いますから。

(私は趣味でやっているので詳しい事は分かりませんのでざっくりとした理解で書きます。)

もともと、コンピュータは軍事利用でした。

たとえば弾道計算やら暗号解読やらです。
暗号解読は一応手作業でもやろうと思えばできます。

ですが、非現実的です。
たとえば暗号方式や時代によってはたかだか "Hello" の 5文字ですら、1カ月はかからないにしても、データの内容を考えると非効率です。

そこで機械に任せようという発想に。

でも機械は0と1からなる機械語( 電源のON/OFFの組み合わせと考えた方がいいかな? )しか認識できません。

でもこれは人間にとってはつらい。

101101101101101011000000000111011010111111010101...

のようなものです。

そこでアセンブラとかのような言語が出来ました。

ですが、このアセンブラ、微妙に使いづらい。

似たような処理をする場合も今でいうコピペの状態です。
それにいわゆるスパゲッティプログラムにもなります。
(Gotoの乱用でどこ行ったかわからなくなる……)

そこで手続き型言語と呼ばれる考え方が出てきました。
C言語とかそういう言語です。

これによって、for文とかで繰り返したり、関数とかにまとめて、関数を呼び出すだけにしたりとかです。

でもまだ問題がありました。

C言語ではデータと処理(関数)は別物です。

たとえばファイルへの書き込みの場合、

C

1FILE* fp = fopen( ファイルパス, "w" ); 2fprintf( fp, 書き込む文字列 ); 3fclose( fp );

と言う風にfclose関数とかはたまたまこのfpを処理するだけでした。

そこでオブジェクト指向と呼ばれる考え方の登場です。

データ(メンバ変数)と処理(メンバ関数)をひとまとめにしたオブジェクトを中心に見る発想法です。

ファイルへの書き込みをオブジェクトにするなら、

C++

1// 以下はあえてC言語のやつでやっています.(説明の為) 2#include<stdio.h> 3 4class FileWriter{ 5 public: 6 FileWriter( const char* filepath ){ 7 this->fp = fopen( filepath, "w" ); // コンストラクタでファイルを開く 8 } 9 ~FileWriter(){ 10 fclose( this->fp ); // デストラクタでファイルを閉じる 11 } 12 13 int write( const char* text ){ 14 fprintf( this->fp, text ); // writeメンバ関数で書き込む 15 } 16}; 17 18int main( void ){ 19 FileWriter fileWriter = new FileWriter( ファイルパス ); 20 fileWriter.write( 書き込む文字列 ); 21 // デストラクタで自動的にファイルが閉じられる 22}

とやれば、fileWriterだけが対象ファイルとその処理方法を知っているという状態にできますから、

「オブジェクトに管理や処理を任せる」ということが出来ます。

これによって、たとえばデザインパターンのBridgeパターンやStrategyパターンのようにオブジェクトを切り替えるだけで良かったりします。

関数は「処理をまとめて、呼び出せばOK」な状態にしてあるだけ。

オブジェクト指向でのオブジェクトは『データの処理や管理をオブジェクトに任せる』ためのものです。

投稿2021/08/10 07:49

BeatStar

総合スコア4962

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

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

m.ts10806

2021/08/10 07:53

たぶんこの方は何言っても無駄です。解決する気も理解する気もないでしょう。 どんなに指摘しても質問編集もしないので。
K_3578

2021/08/10 07:54

>BeatStarさん 回答付いてても普通に無視して質問新規で建てる人なので言っても聞かないかと。
BeatStar

2021/08/10 07:57 編集

@ m.ts10806さん @ K_3578さん あ、確かにそうですね。(過去質問は見ていなかったので……) (無駄なことに時間使ったわ……)
guest

0

投稿2021/08/10 07:41

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問