2017-07-22 11 views
0


私はアクセス修飾子について興味がありました。
クラス図の公開、保護、プライベートの目的は何ですか?どんな例?

公共がを保護

は、オブジェクト自体とそのサブクラスに利用できることを意味し、

プライベート、項目はオブジェクトへのアクセス権を持っている人に利用可能であることを意味しクラス自体内でのみアクセスできることを意味します。

しかし、公開、保護、および私的使用の例はわかりません。
私は、クラス図の公開、非公開、保護されたアクセス修飾子のケースについて教えてください。
私はそれらを正しく理解していることを確認するだけです。

ありがとうございます!

+0

これらの(Java)アクセスタイプは、MySQLまたはデータベースとは何が関係していますか? –

+0

データベース@TimBiegeleisen – r0707637

答えて

1

まさに3つのアクセスタイプだけでなく、異なる言語ではさらに多くのタイプがあります。たとえば

  1. 公共 - このアクセス修飾子で定義されたクラスまたはそのメンバーも、クラスのスコープ外から、どこからでも公にアクセスできるようになります。
  2. プライベート - このキーワードを持つクラスメンバーは、クラス自体内でアクセスされます。クラスインスタンスの参照を使用して、外部のクラスアクセスからメンバーを保護します。
  3. プロテクト - サブクラスが保護されたスーパークラスメンバにアクセスできるようにすることを除いて、プライベートと同じです。
  4. 抽象 - このキーワードは、PHPクラスとその関数にのみ使用できます。抽象関数を含むためには、PHPクラスは抽象クラスでなければなりません。
  5. final - サブクラスがfinalキーワードで定義されたスーパークラスメンバをオーバーライドできないようにします。
  6. 内部 - 宣言を含むプログラム内でアクセスでき、同じアセンブリレベルではアクセスできますが、別のアセンブリからはアクセスできません。
  7. 保護内部 - 保護された内部と内部の両方のアクセスレベルが同じです。同じアセンブリ内のどこにでもアクセスでき、同じクラスのクラスにも同じクラスから継承されます。

これらのうちのいくつかは、クラスにも関数にも変数にも適用できます。
ほとんどの言語では、すべてのクラスメンバーはpublicアクセスタイプ(たとえばJavaは除く)で宣言されています。

メインの質問に戻ります。
このアクセス修飾子をすべて適用すると、コンポーネントのカプセル化が容易になります。

C++( taken from here)で、このようなアクセス修飾子の使用の

簡単な例:

#include <iostream> 
#include<conio.h> 
using std::cout; 
using std::endl; 

struct B { // default access modifier inside struct is public 
    void set_n(int v) { n = v; } 
    void f()   { cout << "B::f" << endl; } 
    protected: 
    int m, n; // B::m, B::n are protected 
    private: 
    int x; 
}; 

struct D : B { 
    using B::m;    // D::m is public 
    int get_n() { return n; } // B::n is accessible here, but not outside 
// int get_x() { return x; } // ERROR, B::x is inaccessible here 
private: 
    using B::f;    // D::f is private 
}; 

int main() { 
    D d; 

// d.x = 2; // ERROR, private 
// d.n = 2; // ERROR, protected 
    d.m = 2; // protected B::m is accessible as D::m 

    d.set_n(2); // calls B::set_n(int) 
    cout << d.get_n() << endl; // output: 2 

// d.f(); // ERROR, B::f is inaccessible as D::f 


    B& b = d; // b references d and "views" it as being type B 

// b.x = 3; // ERROR, private 
// b.n = 3; // ERROR, protected 
// b.m = 3; // ERROR, B::m is protected 

    b.set_n(3); // calls B::set_n(int) 
// cout << b.get_n(); // ERROR, 'struct B' has no member named 'get_n' 

    b.f(); // calls B::f() 
    return 0; 
} 

にだから、まずあなたがオブジェクト指向プログラミングのコア原則を理解する必要があり、この修飾子の目的を理解するために、そして特にカプセル化のパラダイム。
これは、簡単なコード例で簡単に説明できるものではありません。
修飾語は、巨大なOOP世界の一部です。

+0

編集依頼を送信し、タグを変更しました。 –

1

基本的に、パブリック、プライベート、保護されたアクセス修飾子キーワードを使用して、クラスメンバーへのアクセスを制御します。 たとえば、変数またはメソッドをクラス内のみで内部目的で使用したい場合は、そのメンバーをクラスの外部には見たことがないようにしてください。次に、 "Private"アクセス修飾子キーワードで宣言する必要があります。

一方、 "Public"はクラス外からアクセスする必要があるメンバーを宣言するために使用され、コンストラクターはなぜそれらを "Public"キーワードで宣言するべきかの明確な例です。 (.ToString、.Substring)のような有用なタスクを実行するメソッドのような他のメンバは、パブリックとして宣言されるべきメンバーの素晴らしい例です。つまり、クラスの外部から使用でき、クラスを使用するすべての人に便利なタスクを実行できます。

class employee 
{ 
private int instanceCount = 0; 
private string empName; 

public employee(string fname, string lname) 
{ 
//Provide some code for the constructor. 
empname = fname + " " + lname; 
instanceCount ++;} 
} 

それは、コンストラクタは、公開すべきであり、インスタンスの数をカウントするために使用される「instanceCount」変数がプライベートであることは明らかです:

が、この考えてみましょう。

保護されている場合、プライベートに適用されるすべてのものは、保護された小さな相違点に適用され、保護されたクラスは継承クラスで使用できます。

関連する問題