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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Q&A

解決済

6回答

591閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2018/01/25 14:52

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

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

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

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

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

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

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

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

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

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

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

guest

回答6

0

ベストアンサー

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

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

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

オブジェクト指向

投稿2018/01/26 00:07

ttyp03

総合スコア16996

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

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

退会済みユーザー

退会済みユーザー

2018/01/26 13:29

> オブジェクト > ある事に特化した処理やデータをまとめた概念。 これがわかると理解がかなり進むんですけど、「概念」ってなかなか理解できないんですよねぇ。。。
退会済みユーザー

退会済みユーザー

2018/01/27 08:18

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

2018/01/27 11:44

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

退会済みユーザー

2018/01/28 07:30

ビットやOSのタスクのプログラム版つまり、データの最小単位がオブジェクトなのですね。 例 var a = ’オブジェクト’; のオブジェクトという文字列が一つのオブジェクトという事ですね。 オブジェクトとはこの認識でよいでしょうか? また、関数とクラスの違いがいまいちわかりません。
ttyp03

2018/01/28 23:48

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

退会済みユーザー

2018/01/29 10:06

お返事ありがとうございます。 ただの文字列をデータと考える言語とオブジェクトと考える言語があるのですね。 私はphpとjavascriptのみですがオブジェクトと考えるタイプですかね? ・関数はクラスと違ってプロパティというデータが入っておらず中には、関数しか入れられないが、 クラスは、関数だけではなく、プロパティという処理するデータも入れらるのが両社の唯一の違いという事でしょうか?
ttyp03

2018/01/29 23:46

> 私はphpとjavascriptのみですがオブジェクトと考えるタイプですかね? 私はどちらも大して使いませんが、PHPは文字列型、JavaScriptは文字列型とオブジェクト型があるようです(下記リンク参照) https://www.sejuku.net/blog/21538 ただ、どちらで宣言してもメソッドを持っているようなので、結局オブジェクト型?のような気がします(詳しい方よろしく) > クラスは、関数だけではなく、プロパティという処理するデータも入れらるのが両社の唯一の違いという事でしょうか? そもそもクラスと関数を比較するのが間違いです。 関数は関数です。クラスには関数(メソッド)が持てます。
退会済みユーザー

退会済みユーザー

2018/01/30 07:53

クラスと関数は全く別物なので比べるものでもないのでしょうが、 初心者には同じような処理の塊に見えてしまいます。 クラスは中に関数入れられるという事ですが関数の中にも関数の呼び出しはできますよね? 定義は関数内ではできないのがクラストの違いという事でしょうか?
ttyp03

2018/01/30 08:28

> 関数入れられるという事ですが関数の中にも関数の呼び出しはできますよね? 関数入れられる=定義、関数の呼び出し=処理、を同列で考えてはいけません。 クラスに定義する関数も、そうでない関数も基本は同じです。 ただクラスに定義する関数は、そのクラスの趣旨に沿ったものです。 例えば次のような「人」クラスを作ったとします。 <データ(プロパティ)> 名前 性別 <関数(メソッド)> 名前設定 名前取得 性別設定 性別取得 ここで定義する関数は、あくまでも「人」に関する関数です。 足し算する関数なんかは定義しません。 そしてクラスはこのままではただの設計図なので、インスタンス化して初めて使えます。 例えば山田さん用にインスタンス化したり、田中さん用にインスタンス化します。 山田さんクラスを作る必要はありません。 もうこれくらいでいいですかねw 質問に対する回答の範疇を超えているような気がしてきました。 ここまでのコメントを見ていると、まず基本的にプログラムに対する知識が圧倒的に少ない気がします。 関数とはなんぞや?がまず理解できていないと、オブジェクトの話も難しいと思います。 まず何の言語でもいいので、 ・関数もオブジェクトも使わないシンプルなコードを書いてみる ・関数を使ってみる ・クラスを使ってみる と徐々にステップアップしていけば、もう少し理解度も上がると思います。
退会済みユーザー

退会済みユーザー

2018/01/30 08:51

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

0

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

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

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

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

投稿2018/01/26 03:09

ku__ra__ge

総合スコア4524

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

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

退会済みユーザー

退会済みユーザー

2018/01/26 03:43

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

0

関数は入力を与えて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 09:40

apo

総合スコア349

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

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

退会済みユーザー

退会済みユーザー

2018/01/26 13:23

一番わかりやすい回答ありがとうございます。 >>> 関数は入力を与えて1つの処理を行い結果を得ることができます。 クラスは処理をいくつも含めることができます。 こちらの一つの処理という単位がよくわかりません。 echo print ならそれぞれが一つの処理ですか?
apo

2018/01/26 14:58

上の例文ではClass1というクラスを作りました。 そのClass1のなかにTashizanという処理(メソッド)とHikizanという処理を 書きました。 処理というか、機能といった方がいいかもしれません。 上の例ではclass1.Tashizan(1,2)と書けば1+2の処理をすることができ、 class1.Hikizan(1,2)と書けば1-2という処理をすることができます。
退会済みユーザー

退会済みユーザー

2018/01/27 04:13

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

0

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

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

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

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

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

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

投稿2018/01/26 08:01

coco_bauer

総合スコア6915

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

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

退会済みユーザー

退会済みユーザー

2018/01/26 10:20

オブジェクトとは、クラスト、インスタンスとコンストラクタをまとめた総称なのですか? >>> クラスは、クラス名、クラス継承、インスタンスが備える値(プロパティ)、クラスが提供する機能(メソッド)などを定義したもの。 これは難しくてさっぱりわかりませんでした
coco_bauer

2018/01/30 08:22

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

0

こんにちは。

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

オブジェクトとは?

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

クラスとは?

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

インスタンスとは?

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

まとめ(要約)

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

投稿2018/01/27 05:45

tamoto

総合スコア4103

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

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

退会済みユーザー

退会済みユーザー

2018/01/27 08:57

プログラムで扱える「データの最小単位」のこと。intの1はオブジェクトであり、stringの"abc"もオブジェクト。intとstringをまとめたようなデータを作ったら、それもまたオブジェクト。 単位の事だったんですか? ビットやOSのタスクのプログラム版という認識でよいのでしょうか?
tamoto

2018/01/27 13:27

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

退会済みユーザー

2018/01/28 07:26

ビットやOSのタスクのプログラム版つまり、データの最小単位がオブジェクトなのですね。 例 var a = ’オブジェクト’; のオブジェクトという文字列が一つのオブジェクトという事ですね。
guest

0

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

int x;

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

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

投稿2018/01/27 04:48

編集2018/01/27 04:50
HogeAnimalLover

総合スコア4830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問