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

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

ただいまの
回答率

90.52%

  • Java

    13766questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • オブジェクト指向

    284questions

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

  • オブジェクト

    91questions

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

「手続き型プログラミング」と「オブジェクト(指向)型プログラミング」の違いについて

解決済

回答 5

投稿

  • 評価
  • クリップ 3
  • VIEW 5,198

mr0237

score 143

JAVAのオブジェクト指向を勉強・練習している者です。

説明が下手ですいませんが、「スッキリわかるJava入門 第2版 (スッキリシリーズ) 」の(P281)「手続き型プログラミングとの違い」のところを復習を兼ねて読み直しているのですが、「手続き型プログラミング」とは

コンピュータがどのように動けばよいかという手順を考え、プログラムの先頭から順番に命令として記述していく方法です。

と書かれているのですが、JAVAも、同じようにプログラムの先頭から順番に命令として記述していき、実行していくと私は思うんですが、(違っていたらすいません)オブジェクト型プログラミング手続き型プログラミング厳密には何がどう違うのでしょうか? 

又、オブジェクト型手続き型ではコンピュータ上ではどう動くのですか?

例えばオブジェクト型コンピュータ上ではクラスのソースコードをコンピュータのメモリ上に展開するのですが、手続き型コンピュータ上ではどう動くのでしょうか?

わかりやすく教えてくれませんか?  

よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+7

「オブジェクト指向型言語」と「手続き型言語」の区分は、論者によっても違ってきます。

  1. 言語として「メソッド」が登場しない、C言語のような言語だけが手続き型言語
  2. メソッド以外の関数・コードが書ける、PHPやC++のような言語も手続き型言語に含まれる
  3. Javaのような、「メソッドの中身を手続き型で書いていく」言語も手続き型言語に区分する

Javaの場合、すべてのコードは何かしらのメソッドとしてオブジェクトに属させるしかありませんが、メソッド内部では実行することを順に書いていくという、手続き型の概念で成立しています。

一方で、「手続き型でない」プログラミングパラダイムとしては、以下のようなものがあります。

  • 副作用のない関数を組み合わせてプログラムを構築する「関数型言語」
  • 解が満たすべき条件だけを与えて、実際の算出はエンジンに任せる、「制約型言語」(SQLもこの部類です)

(たまに特殊なCPUがありますが)ふつうのコンピュータは「オブジェクトは何か」ということを認識できません。実際に実行する命令は「このアドレスに何を書き込む」とか「このメモリに入っているコードに飛ぶ」といった、ごく簡単な機能のものばかりです(C++のコンパイラは、オブジェクト指向で書かれたコードを、このような形に変換します)。アセンブラといって、実際の機械語を人間が読み書きしやすい形にもできますが、大きなプログラムをアセンブラで直接書くのは現実的ではありません。

一方、Javaのコードは直接マシンで実行するのではなく、Java仮想マシンの上で動きます。この仮想マシンはオブジェクトの概念を理解して動作します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+4

こんにちは。

Javaのクラスはメソッド(関数の一種)を持っています。
そして、関数は「その関数がどのように動けばよいかという手順を考え、関数の先頭から順番に命令として記述していく方法です。」
つまり、関数=手続き型プログラミングと言っても良いです。

一般に関数は何らかのデータを取り扱います。そして、複数の関数が1つのデータの塊を操作することにより、何らかの機能を実現することは多いです。(良く出てくる例では、線形リストやソートなどなど)
それらをひとかたまりとしてプログラミングすることが「オブジェクト指向型プログラミング」の本質と思います。関数=手続きだけでなくデータ構造もセットにするという考え方です。(人によって捉え方は異なります。もう少し様々な機能を使わないとオフジェクト指向とは言えないと言う人もいるかも知れません。)

そして、C言語のような手続き型言語でも、データ領域の獲得と初期化、その領域の解放、それぞれのデータを使って駆動する関数群を定義することはできますし、やっている人は多いです。メジャーなものではlinuxのカーネルなど。
しかし、それらをまとめるための統一的な方法がなく、プリフィックス等の付け方を決めてプログラマが個別に用意します。その実現方法も様々な方法があるので、様々な仕組みが存在しメンテナンスする人はたいへんです。

これに対して、データ構造と関数をまとめてクラスとして定義し、一貫した方法で記述できるような支援のある言語がオブジェクト指向型言語です。そして、現代の多くのオブジェクト指向型言語の考え方はかなり似通っているので、1つのオブジェクト指向型言語を学べば、その知識を他の同様な言語に活かしやすいです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/16 10:53

    すいません「関数」は「命令文みたいなもの」の感じでいいのでしょうか?

    キャンセル

  • 2017/04/16 13:34

    「命令文みたいなもの」の意味が良く分かりませんが、関数は式の中に出てくるものです。int a=foo(b)+123;と言う文が有る時、「foo(b)+123」が式で、foo(b)が関数foo()の呼び出しです。そして、関数foo()は別途定義します。

    キャンセル

  • 2017/04/16 16:59

    すいません。つまり関数は,「処理をひとまとめに定義する」みたいな感じでしょうか?

    キャンセル

  • 2017/04/16 17:06

    その通りです。

    キャンセル

checkベストアンサー

+3

オブジェクト指向と手続き型は相反するものではありません。大雑把に述べれば、オブジェクト指向プログラミングはマクロな考え方、手続き型はミクロな考え方のプログラミングです。

javaでもすべての処理をMainメソッド内に記述しても文法上の誤りはないです。ただし、こうなるともうオブジェクト志向と呼ぶより手続き型に近いものになってしまします。そもそも、オブジェクト指向言語であっても、ソースを書き下す過程は手続き型の考え方が必要です。

逆にC言語(C++やObjective Cは含まない)の中でも、構造体とポインタを駆使し、独自ルールをチーム内で作っていけばオブジェクト指向に相当するプログラミングもできるはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/16 10:33

    すいません。「オブジェクト指向プログラミングはマクロな考え方、手続き型はミクロな考え方」とはどういうことでしょうか?

    キャンセル

  • 2017/04/16 12:39

    横から失礼します。

    マクロ:巨視的、ミクロ:微視的というのはわかりますでしょうか。
    砕いていうなら、マクロ:全体的に見た感じ、ミクロ:細部を見た感じ です。
    オブジェクト指向は全体で見たときにオブジェクトというデータと処理をまとめた大きな括りを使って、その関わり合いでプログラミングするという、全体視点からの考え方です。
    その細部を見ていくと、質問者様の言う通り、上から下に順に処理する手続き型となっています。

    キャンセル

  • 2017/04/16 13:19

    はい。大体そんな感じです。

    オブジェクト指向プログラミングでは「処理の単位をオブジェクトと呼ばれる単位レベルで考える」ことをベースとしています。ただし、これも突き詰めればjavaVM上での処理レベルの集まりですので、ソースを書き下す段階では手続き型でもあるということになります。

    キャンセル

+1

他の方も述べられているように別物って訳じゃないですね。

ある時、手続型hogehoge があらわれた。
いま、オブジェクト指向hogehoge に進化した。
って感じでしょか。

要するにできることが増えたってことスな。
個人的には間に 構造化hogehoge を入れたいところ。
こういう連綿と連なっている変化をながめると
なぜそのような形で現在に至るかが分かりやすいと思ってます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

オブジェクト指向型プログラミングと、手続き型プログラミングの厳密な違いについては、「オブジェクト指向プログラミングとは~」といった結論の出ない問いを土台にしており、回答することは難しいです。

せいぜい、Javaはオブジェクト指向型、Cは手続き型、のようにプログラミング言語で「やんわり」理解するのがよいでしょう。

オブジェクト型と手続き型ではコンピュータ上ではどう動くのですか?

この問いに対しての直接的な回答は「コンピュータ上での動きに違いはない」です。
現行のコンピュータはすべてノイマン型コンピュータであり、その動作はプログラム言語の違いによってなんら影響を受けません。

オブジェクト型はコンピュータ上ではクラスのソースコードをコンピュータのメモリ上に展開する

コンピュータのメモリ上にどのようにプログラムを展開するかは各言語のコンパイラなりに依存しており、オブジェクト指向型だから~といった決まりはありません。

オブジェクト指向型とか手続き型とは、プログラムを作る上での方法論のことです。
なので、最初のステップとしては Java 言語でプログラミングをしているのであれば(とりあえず)オブジェクト指向型でプログラムを組んでいると考えて先に進めばよいでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Javaの基礎を学んだ人が上級者になるまでの学習計画について

    Javaの基礎を理解した人が、上級者を目指してどのように学習を進めていけば良いのか、 アドバイス頂けますと幸いです。 可能であれば書籍も紹介頂けると幸いです。 学ぶことは色々ある

  • 解決済

    基礎を学び終えた後の勉強方針

    はじめまして。 このサイトを利用するのは初めてです。宜しくお願いします。 Javaを独学で勉強し初めて1ヶ月が経ちました。 進展状況としましては、初心者におすすめの「スッキリわか

  • 解決済

    javaゲーム勉強

    javaは超基本のintに10をyに40を入力して、足し算や引き算、割り算やif文など、はわかるんですが、ゲームを作るとなると全くわかりません。動画である方が作り方を紹介しているの

  • 解決済

    [java]バブルソートに関する質問です

    こんにちは。 現在独学でjavaを勉強しています。 バブルソートについての問題を行っているのですが、 ソートがうまくいきません・・・ 下記にソースを記載させていただきま

  • 解決済

    javaについて

    プログラミング言語というと、 コンピュータの入力装置、出力装置、演算装置、制御装置、記憶装置、外部にあ る各装置を利用して、何か目的を実現するために、上記それぞれの装置にその実

  • 解決済

    このプログラムの仕組みがよくわかりません

    学校の課題で出たプログラムなんですが、各メソッドで何が行われていて、コンパイルの結果のようになるのかがわかりません。 コンパイルするときには、元から作っていた乱数が出るプログラム

  • 解決済

    オブジェクト指向的な構文を知りたいです。

    前提・実現したいこと プログラム自体は問題なく動作します。 時間/分/秒を入力してもらい、指定した時間に近づく度にアラームを鳴らすという機能です。 (文字列表示だけですが、文

  • 受付中

    javaの勉強スケジュール表の作り方がわかりません

    Java勉強の向こう一週間のスケジュール表を作成することになりました。 しかし、やること、オブジェクト思考の内容を学ぶ、結果開発のときにオブジェクト思考をいかせるようになると書い

同じタグがついた質問を見る

  • Java

    13766questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • オブジェクト指向

    284questions

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

  • オブジェクト

    91questions

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

  • トップ
  • Javaに関する質問
  • 「手続き型プログラミング」と「オブジェクト(指向)型プログラミング」の違いについて