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

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

ただいまの
回答率

90.75%

  • PHP

    19182questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

オブジェクトとクラスがよくわかりません

解決済

回答 6

投稿

  • 評価
  • クリップ 0
  • VIEW 485
退会済みユーザー

退会済みユーザー

オブジェクトとクラスがよくわかりません

>>>
このオブジェクトというものは、PHPでは「設計図」と「作った部品」とから構成されます。まず最初に、オブジェクトの内容を定義した設計図を作り、その設計図をもとにして、実際に操作する部品を作る、というわけです。

この設計図のことを「クラス」、クラスから作られた部品の事を「インスタンス」といいます。クラスは、以下のような形で設計します。
>>>

を見るとオブジェクトとはクラスとインスタンスを合体したものなのでしょうか?

インスタンスはクラスを具現化したものと言いますが、具体的なイメージが付きません。

またクラスは設計図の事で、関数と同じく何度も同じ記載をしたくない時につかうようですが、関数とどう違うのでしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 6

checkベストアンサー

+5

オブジェクト
ある事に特化した処理やデータをまとめた概念。

クラス
オブジェクトを実現するためのひとつの手法。
インスタンス化しない状態ではただの設計図。

インスタンス
クラス等のオブジェクト化の仕組みを実体化したもの。
(基本的には)これをやって初めて使えるようになる。

オブジェクト指向

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/26 22:29

    > オブジェクト
    > ある事に特化した処理やデータをまとめた概念。

    これがわかると理解がかなり進むんですけど、「概念」ってなかなか理解できないんですよねぇ。。。

    キャンセル

  • 2018/01/27 17:18

    おしゃるとおりこれでは初心者はわかりません

    キャンセル

  • 2018/01/27 20:44

    初心者でも十分わかるように難しい言葉は使わずに、順を追って答えたつもりなんですけどね。
    具体的に何がわからないのでしょうか?

    キャンセル

  • 2018/01/28 16:30

    ビットやOSのタスクのプログラム版つまり、データの最小単位がオブジェクトなのですね。


    var a = ’オブジェクト’;
    のオブジェクトという文字列が一つのオブジェクトという事ですね。

    オブジェクトとはこの認識でよいでしょうか?

    また、関数とクラスの違いがいまいちわかりません。

    キャンセル

  • 2018/01/29 08:48

    > オブジェクトとはこの認識でよいでしょうか?
    一概にも正しいとは言えません。
    言語にもよりますが、文字列がただのデータの場合と、オブジェクトの場合があるからです。
    ただのデータの場合、'オブジェクト'というデータのみであり、それ以上でもそれ以下でもありません。
    オブジェクトの場合、最初の回答にも書きましたとおり、「データ」と「処理」を含みます。
    この場合「データ」は'オブジェクト'という文字列になるのはわかると思いますが、「処理」にあたるのはその言語、もしくはそのオブジェクトの設計により異なります。
    例えば、文字数を返す処理、文字列を返す処理、データに文字列を設定する処理、文字列の種類を判定する処理、などが「処理」にあたります。
    というように「オブジェクト」は、「データ」と「処理」がセットになったものになります。
    そしてそのオブジェクトを実現するひとつの手法として「クラス」があります。
    クラスの説明の前に、「関数」を説明しておきます。
    関数は、ある処理を再利用できるようにしたものです。
    例えば2つの値を足して結果を返す処理などを関数として定義(例えばaddという名前をつける)しておけば、このadd関数を呼び出せば足し算をすることができます。
    長いプログラムコードであれば、再利用したいコードは沢山でてきます。
    その都度同じコードを書いていては非効率なので、そこを関数に置き換えることで効率よく書くことができます。
    そしてクラスですが、一般的にクラスが持つ要素は「プロパティ」と「メソッド」です。
    名称は異なりますが通常、プロパティはデータ、メソッドは関数に置き換えることができます。

    キャンセル

  • 2018/01/29 19:06

    お返事ありがとうございます。


    ただの文字列をデータと考える言語とオブジェクトと考える言語があるのですね。
    私はphpとjavascriptのみですがオブジェクトと考えるタイプですかね?



    ・関数はクラスと違ってプロパティというデータが入っておらず中には、関数しか入れられないが、

    クラスは、関数だけではなく、プロパティという処理するデータも入れらるのが両社の唯一の違いという事でしょうか?

    キャンセル

  • 2018/01/30 08:46

    > 私はphpとjavascriptのみですがオブジェクトと考えるタイプですかね?
    私はどちらも大して使いませんが、PHPは文字列型、JavaScriptは文字列型とオブジェクト型があるようです(下記リンク参照)
    https://www.sejuku.net/blog/21538
    ただ、どちらで宣言してもメソッドを持っているようなので、結局オブジェクト型?のような気がします(詳しい方よろしく)

    > クラスは、関数だけではなく、プロパティという処理するデータも入れらるのが両社の唯一の違いという事でしょうか?
    そもそもクラスと関数を比較するのが間違いです。
    関数は関数です。クラスには関数(メソッド)が持てます。

    キャンセル

  • 2018/01/30 16:53

    クラスと関数は全く別物なので比べるものでもないのでしょうが、
    初心者には同じような処理の塊に見えてしまいます。

    クラスは中に関数入れられるという事ですが関数の中にも関数の呼び出しはできますよね?
    定義は関数内ではできないのがクラストの違いという事でしょうか?

    キャンセル

  • 2018/01/30 17:28

    > 関数入れられるという事ですが関数の中にも関数の呼び出しはできますよね?
    関数入れられる=定義、関数の呼び出し=処理、を同列で考えてはいけません。

    クラスに定義する関数も、そうでない関数も基本は同じです。
    ただクラスに定義する関数は、そのクラスの趣旨に沿ったものです。
    例えば次のような「人」クラスを作ったとします。

    <データ(プロパティ)>
    名前
    性別
    <関数(メソッド)>
    名前設定
    名前取得
    性別設定
    性別取得

    ここで定義する関数は、あくまでも「人」に関する関数です。
    足し算する関数なんかは定義しません。
    そしてクラスはこのままではただの設計図なので、インスタンス化して初めて使えます。
    例えば山田さん用にインスタンス化したり、田中さん用にインスタンス化します。
    山田さんクラスを作る必要はありません。

    もうこれくらいでいいですかねw
    質問に対する回答の範疇を超えているような気がしてきました。
    ここまでのコメントを見ていると、まず基本的にプログラムに対する知識が圧倒的に少ない気がします。
    関数とはなんぞや?がまず理解できていないと、オブジェクトの話も難しいと思います。
    まず何の言語でもいいので、
    ・関数もオブジェクトも使わないシンプルなコードを書いてみる
    ・関数を使ってみる
    ・クラスを使ってみる
    と徐々にステップアップしていけば、もう少し理解度も上がると思います。

    キャンセル

  • 2018/01/30 17:51

    了解しました。別質問にします。

    キャンセル

+2

オブジェクトとはクラスとインスタンスを合体したものなのでしょうか? 

オブジェクトはクラスやインスタンスよりも意味が曖昧な単語なので、こういう意味だという明確な定義はありません。
この文脈ではオブジェクトを、「クラスの持つ機能(メソッドやプロパティ)+インスタンス」をオブジェクトと表現しているようです。

インスタンスはクラスを具現化したものと言いますが、具体的なイメージが付きません。
またクラスは設計図の事で、関数と同じく何度も同じ記載をしたくない時につかうようですが、関数とどう違うのでしょうか?

クラス、インスタンス、関数は、プログラム言語の持つ機能として明確に定義されているものなので実際コードを書けばイメージできます。
学習のために実際にコードを書いてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/26 12:43

    オブジェクトはそんなにあいまいな単語なのですね。

    キャンセル

+1

オブジェクト指向のシステムは、クラス(設計書・仕様書)という種類のものと、インスタンス(実体)という種類のものから成り立っています。
各インスタンスは、その基になるクラスが関係づいていいます。

これらのもの(クラス、インスタンス)がひっくるめて「もの(Object)」という曖昧な名前で呼ばれているのです。

==
インスタンスをオブジェクトと呼んでいる場合があります。
まぁ、クラスもインスタンスもオブジェクトなので、インスタンスをオブジェクトと呼ぶのは間違いではないのですが、インスタンスを意味する狭義のオブジェクトと、クラスまでも含んだ広義のオブジェクトを区別するのは容易ではありません(その人が、どちらのつもりで使っているか判らない、そもそも区別できている人なのか否かも判らない、、、)

こういう事も、オブジェクトという語を判りにくくしている原因だと思います。

==
<確かだと思われる事:私見>
クラスは、クラス名、クラス継承、インスタンスが備える値(プロパティ)、クラスが提供する機能(メソッド)などを定義したもの。

インスタンスは、あるクラスに基づいて作られたもの(計算機上では、メモリ上のデータ群と、メソッドを実現するプログラム群)

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/26 19:20

    オブジェクトとは、クラスト、インスタンスとコンストラクタをまとめた総称なのですか?


    >>>
    クラスは、クラス名、クラス継承、インスタンスが備える値(プロパティ)、クラスが提供する機能(メソッド)などを定義したもの。

    これは難しくてさっぱりわかりませんでした

    キャンセル

  • 2018/01/30 17:22

    インスタンスもクラスは、オブジェクトです。 メソッドはクラス(クラス定義)の中で定義されるもので、他の言語だと関数とかSubroutineにあたります。 コンストラクタは、インスタンスを作成する際にだけ使われる特殊なメソッドです。  こうした概念から理解しようとするとイメージがわかないでしょうから、具体的なシステムとそのコードを理解するほうが良いと思います。 たとえば、http://php.net/manual/ja/language.oop5.php の各章を読んでいってみてください。

    キャンセル

+1

関数は入力を与えて1つの処理を行い結果を得ることができます。
クラスは処理をいくつも含めることができます。

PHPではなく、C#でごめんなさい。

関数

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Kansu(1));
        }

        static int Kansu(int a)
        {
            return a+1;
        }
    }
}


結果は2とでます。

オプジェクト

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 class1 = new Class1();
            Console.WriteLine(class1.Tashizan(1, 2));
            Console.WriteLine(class1.Hikizan(1, 2));
        }
    }

    class Class1
    {
        public int Tashizan(int a, int b)
        {
            return a + b;
        }

        public int Hikizan(int a, int b)
        {
            return a - b;
        }
    }
}


結果は3と-1がでます。

他にもオブジェクトが使えるとデータベースを扱えるなど、
色々便利です。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/26 22:23

    一番わかりやすい回答ありがとうございます。

    >>>
    関数は入力を与えて1つの処理を行い結果を得ることができます。
    クラスは処理をいくつも含めることができます。

    こちらの一つの処理という単位がよくわかりません。
    echo
    print
    ならそれぞれが一つの処理ですか?

    キャンセル

  • 2018/01/26 23:58

    上の例文ではClass1というクラスを作りました。

    そのClass1のなかにTashizanという処理(メソッド)とHikizanという処理を
    書きました。
    処理というか、機能といった方がいいかもしれません。

    上の例ではclass1.Tashizan(1,2)と書けば1+2の処理をすることができ、
    class1.Hikizan(1,2)と書けば1-2という処理をすることができます。

    キャンセル

  • 2018/01/27 13:13

    c#がよくわからないのですがJSで考えることは可能でしょうか?
    return a+1;
    このreturnが関数には絶対に一つしか記載できないがクラスは複数×という事でしょうか?

    キャンセル

0

プリミティブな型で例えます。

int x;

があったとき、intがクラス、xがオブジェクトに対応します。もっともクラスやオブジェクトはもっと多機能ですけれど、クラスとオブジェクトの違いはこれに対応します。

で、どう複雑かといいますと、内部にたくさんの入れ子変数をもつことができたり、内部関数を定義できたりします。さらには他のクラスの機能を引き継いだり、内包したりすることができます。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

こんにちは。

回答がたくさん付いているので、普段解説に使用されないような表現でオブジェクト指向を説明してみます。
自分の専門はC#なので、この回答はC#の言語仕様を基準としていますが、オブジェクト指向の概念自体はどの言語でもほぼ同等なものです。

 オブジェクトとは?

プログラムで扱える「データの最小単位」のこと。intの1はオブジェクトであり、stringの"abc"もオブジェクト。intとstringをまとめたようなデータを作ったら、それもまたオブジェクト。
オブジェクト指向のプログラムでは、データが存在する空間(即ちメモリ空間)に無数のオブジェクトが散らばっている状態をイメージすれば良い。プログラムが計算するときは、オブジェクト単位でのみデータを操作できる。

 クラスとは?

オブジェクトが「データ空間に存在する多様なデータの内の一つ」とすると、そのオブジェクトには「種類」が存在していないとまともなプログラムは作れないでしょう。例として、整数型の場合は「四則演算に利用可能な『オブジェクト』」を必要としていると言い換えることができます。このとき、データ空間上の無数のオブジェクトの中から「四則演算が可能な性質」を持つオブジェクトを探し、丸で囲みます。この「丸」こそが、クラスです。文字列型の場合は、「オブジェクトの中で、文字列としての性質を持つもの」を囲む「丸」の存在をイメージできるでしょう。文字列型の「丸」には、例えば「その中のオブジェクト同士を連結できる」という性質を持たせることができます。
ところで、特定の丸(A)に囲まれたオブジェクト群の中で、さらに小さな丸(B)で囲むことができるオブジェクト群が存在する場合、それは「継承」を表します。データ空間をイメージすると、「Bで囲まれたオブジェクト群は、必ずAにも囲まれている」ということは、Bのオブジェクトは「Aとしても扱える」、即ち、BはAを継承したクラスであると言うことになります。

 インスタンスとは?

データ空間に存在する無数のオブジェクトの内、特定の一つをピックアップしたとき、それが仮に「intの丸(クラス)に囲まれた中に存在する」場合、そのオブジェクトは「intのインスタンス」であると表現します。そのオブジェクトは「intクラスに定義されている性質を持つ」ということが保証されます。オブジェクト指向プログラミングは、「プログラミング言語」としての制約や利便性の理由から、「オブジェクトは、任意のクラス定義を基にして生成する」等の決まりごとがあります。これを指して「インスタンス生成」と表現します。

 まとめ(要約)

  • オブジェクト: プログラムで扱う「データ」そのもののこと。
  • クラス: オブジェクトの持つ性質に着目した「分類」のこと。
  • インスタンス: 特定のクラスに所属している「オブジェクト」のこと。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/01/27 17:57

    プログラムで扱える「データの最小単位」のこと。intの1はオブジェクトであり、stringの"abc"もオブジェクト。intとstringをまとめたようなデータを作ったら、それもまたオブジェクト。

    単位の事だったんですか?
    ビットやOSのタスクのプログラム版という認識でよいのでしょうか?

    キャンセル

  • 2018/01/27 22:27

    そうですね。変数に入れたりしてプログラム上で扱える「データ」の一つを指してオブジェクトと言えばいいです。
    配列というデータも、それ自体が「複数のオブジェクト」を表しているわけではなくて、複数のオブジェクトが中に入っているだけの「一つのオブジェクト」なのです。

    キャンセル

  • 2018/01/28 16:26

    ビットやOSのタスクのプログラム版つまり、データの最小単位がオブジェクトなのですね。


    var a = ’オブジェクト’;
    のオブジェクトという文字列が一つのオブジェクトという事ですね。

    キャンセル

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

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

関連した質問

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

  • PHP

    19182questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。