ホームページ バックエンド開発 PHPチュートリアル JavaScript - 「オブジェクト指向とは何ですか?」にエレガントに答える方法

JavaScript - 「オブジェクト指向とは何ですか?」にエレガントに答える方法

Dec 01, 2016 am 12:25 AM
c++ java javascript php python

多くの面接官がこの質問をしたがるのですが(私は学生です)、この質問に対する私の答えは毎回不十分だと感じます。
私の答えは通常次のとおりです

  • その設計機能は次のとおりです: 継承、カプセル化、ポリモーフィズム。

  • 具体から抽象へ。プロパティは変数になり、動作はメソッドになります。
  • しかし、インタビュアーはあまり満足していないようですが、さまざまな専門家からの比較的エレガントな答えはあるのでしょうか?

返信内容:

多くの面接官がこの質問をしたがるのですが(私は学生です)、この質問に対する私の答えは毎回不十分だと感じます。 私の答えは通常次のとおりです


その設計機能は次のとおりです: 継承、カプセル化、ポリモーフィズム。

    具体から抽象へ。プロパティは変数になり、動作はメソッドになります。
  • しかし、インタビュアーはあまり満足していないようですが、さまざまな専門家からの比較的エレガントな答えはあるのでしょうか?

  • 最初の答えは、

    プログラミング パラダイム

    です。
次に、あなたが言及した 3 つの機能について詳しく説明します。例:

継承: サブクラスは親クラスによって公開された変数とメソッドを再利用できます。 カプセル化: 一連の詳細を保護します。このメソッドの存在を認識する必要があるのは、外部から呼び出す場合のみです

    ポリモーフィズム: 親クラスのメソッドは、サブクラスによって継承された後、さまざまな方法で実装できます。
  • 次に、オブジェクト指向の長所と短所について話しますが、1 つの点について絶対的な長所と短所はなく、比較が必要です。したがって、

    プロセス指向プログラミングのアイデア
  • について話す必要があります。
  • 戻ってきたのですが、記事を紛失してしまいました

  • lz の質問が反対票を投じられたことを確認し、コミュニティで確認したところ、確かに関連する回答があることがわかりました。私の記事は小さな補足です。質問がある場合はご指摘ください。
  • オブジェクト指向思考
私の仕事の例で私の答えに追加すると、私は少し前に非常に単純な関数を作成しました、

これは確かに非常に単純な関数ですが、ユーザーは他のコメントに「いいね」を付けることができるのは一度だけではありません。記事に「いいね!」、質問に「いいね!」などを付けることができ、「いいね!」によって一連のイベント(関連ユーザーへの通知など)が発生する可能性があります。最初は3つの書き方を考えました。 リーリー 最終的には 3 番目の書き方を使用しました。親指を伸ばした瞬間に実装方法がわかります。

これは本当に興味深い質問ですね(笑)。もちろん、オブジェクト指向の概念も誇張されていますが、結局のところ、人によって理解は異なります。

私の理解には 2 つの側面が含まれます:

1 つはオブジェクト指向設計です。点赞

1 つはオブジェクト指向プログラミングです。

オブジェクト指向設計の中心となる考え方はモジュール性ですが、オブジェクト指向プログラミングの中心となる考え方はインターフェイス指向です。オブジェクト指向プログラミングには、オブジェクトベース プログラミングまたはプロトタイプ プログラミングと呼ばれる親戚もあります (JavaScript もその 1 つです)。 )。したがって、オブジェクト指向プログラミングでは通常、前述したカプセル化、継承、ポリモーフィズムなどの言語レベルのサポートが必要です。

    オブジェクト指向の概念が比較的人気があったとき、ソフトウェアの再利用についてよく話題になり、継承はソフトウェアの再利用を直接的に表したものでした。しかしその後、継承ではなく合成をもっと使用すべきであることが発見され、インターフェイス指向のプログラミングが普及しました。
  • 少し遠くなってしまったのでこの辺でやめておきます。

  • すべてはオブジェクトです。

  • オブジェクト指向

すべてはオブジェクトです

必ず例を使用してください

例: 動物-》ふる動物-》人、ライオン、トラ

たとえばポリモーフィズムを追加すると、すべて次のようになります

遺伝、例えばフル動物はすべて胎生であるなど

プロジェクトを実装するときは、ビジネスをコードに抽象化する必要があります。この抽象化プロセスはプログラミング パラダイムであり、オブジェクト指向もその 1 つです。同様のものには、プロセス指向プログラミングや関数型プログラミングなどがあります。

オブジェクト指向の特徴は继承, 多态, 封装です。

その後、面接官は質問を開始できます 继承, 多态, 封装

完璧です! ~~~

プロセス指向プログラミングと関数型プログラミングが何なのかを知っておくと良いでしょう。

自己完結型、理解できないなら辞めればいいよ、この面接官は優秀すぎる!

js は言いました: すべてはオブジェクトであり、オブジェクトもオブジェクトです - 何も間違っていません

そう、すべてはオブジェクトです

zhihu での回答を読んだのを覚えています。(実際には) 最も重要なことはコードの再利用であるという彼の理解でした。

カプセル化: カプセル化されたコード ブロックを直接使用でき、これが再利用されます。

継承: 既存の属性を使用します。これは再利用です。

ポリモーフィズム: 詳細は異なりますが、基本的には最初に再利用する必要があります。

高度なプログラミング、パラダイム、その他の高度に理論的なことについては説明しませんが、コードを書くこと自体の最も直接的な利点と経験は、再利用が増えることでコードがよりシンプルになることです。

パートナー(通称:彼氏/彼女)と向き合って、優雅な姿勢をとり、愛情を込めて「見てください」と伝える…これがパートナーと優雅に向き合うことです

データと関連する動作のパッケージ化

興味深い質問です。私も学生なので、私自身の理解を共有したいと思います。

オブジェクト指向の優れた特徴は、データと動作 (データの操作) を同時に結合し、現実世界の操作ロジックにより似ていることです
私がそう思う理由は、従来の方法(プロセス指向など)との比較に基づいています。

たとえば、C 言語のデータ処理と動作は実際には少し分離されており、動作により注意が払われます。そこには「物」という概念はなく、行為(機能)が溢れた世界です。主に関数が関数を呼び出し、最初から最後まで結果が与えられます... この世界で最も重要なことはさまざまなアクションです。

C++ の「オブジェクト」は、特に人などの物に似ています。その世界は物で満ちた世界です。主に物と物との関係(人と物、人と人となど)、その関係や衝突が最終的な結果につながります... この世で最も大切なものは様々な物です。

オブジェクト自体がデータと機能を運びます。オブジェクト間の関係だけが世界を動かします。これら 2 つの点で、オブジェクト指向プログラミングは現実世界により似ています。

上記の「継承、カプセル化、ポリモーフィズム」およびその他の特性は、現実世界をよりよく理解するためにシミュレーションするために使用することもできます。いくつか例を挙げてみましょう...

  • 継承: 本、教科書、コンピューターの教科書 - これは現実世界における継承関係です。

  • パッケージング: 携帯電話 - パッケージ化されており、使用する際に内部の回路ロジックを知る必要はありません。

  • ポリモーフィズム: People.Look (美しさ) & People.Look (強い光) - パラメータのタイプが異なり、実行も異なります。

オブジェクト指向の利点も理解しやすいです。 1 つは、オブジェクトが人間の世界理解のルールに従って提示され、一般的な考え方に準拠しているため、理解しやすさが向上することです。2 つ目は、システムの開発と保守が大幅に容易になることです。オブジェクトのデータと関数を新たに理解することと同じです。オリジナルに基づいていくつかの点を変更します。

私の言ったことは間違っています、批判して訂正してください…!

一部のインタビュアー自身が非常に愚かである可能性を排除することはできません。これは非常に大きなテーマなので、数日間一緒に座っても終えることができません

Zhihu でのスクロールを減らして、より多くのコードを記述します

すべてはオブジェクトです。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

Deepseek Xiaomiをダウンロードする方法 Deepseek Xiaomiをダウンロードする方法 Feb 19, 2025 pm 05:27 PM

Deepseek Xiaomiをダウンロードする方法

どうやって彼にdeepseekに尋ねますか どうやって彼にdeepseekに尋ねますか Feb 19, 2025 pm 04:42 PM

どうやって彼にdeepseekに尋ねますか

DeepSeekを検索する方法 DeepSeekを検索する方法 Feb 19, 2025 pm 05:18 PM

DeepSeekを検索する方法

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

PHPでHTML/XMLを解析および処理するにはどうすればよいですか?

DeepSeekをプログラムする方法 DeepSeekをプログラムする方法 Feb 19, 2025 pm 05:36 PM

DeepSeekをプログラムする方法

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8 Stream Foreachから休憩または戻ってきますか?

See all articles