Kapitel 7.3 Zugreifbarkeit

Ähnliche Dokumente
3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

Vererbung & Schnittstellen in C#

Einführung in die. objektorientierte Programmierung

Kapitel Abbildung von UML-Modellen auf Code

3 Objektorientierte Konzepte in Java

Prof. W. Henrich Seite 1

Java Einführung Abstrakte Klassen und Interfaces

3 Objektorientierte Konzepte in Java

Programmieren in Java

Informationsverarbeitung im Bauwesen

Repetitorium Informatik (Java)

Vererbung. Was versteht man unter dem Begriff Vererbung?

OpenMP am Beispiel der Matrizenmultiplikation

Java I Vorlesung Vererbung und Sichtbarkeit

Java Einführung Methoden. Kapitel 6

Angewandte Mathematik und Programmierung

4 Vererbung, Polymorphie

11.3 Virtuelle Methoden

Überschreiben von Methoden

Objekt-Orientierte Programmierung

Spec# Einführung. Formale Software-Entwicklung Seminar SS 07 Universität Karlsruhe Hilal Akbaba

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Klassenbeziehungen & Vererbung

Objektorientierte Programmierung

Objektorientierte Programmierung OOP

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Objektorientierte Programmierung

Kapitel 6. Vererbung

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Kapitel 6. Vererbung

Sprachübergreifendes Java-XML-Refaktorisieren mit Refacola

13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)

Java Einführung Klassendefinitionen

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Objektorientierte Programmierung

Javakurs für Anfänger

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Programmieren - Vererbung & Polymorphie

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

Kapitel 9. Inner Classes. 9.1 Wiederholung: Iteratoren. Ausführen einer Operation auf allen Elementen einer Containerklasse

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Java für C++ Programmierer

Repetitorium Informatik (Java)

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

13. Tutorium zu Programmieren

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Innere Klassen in Java

Javakurs zu Informatik I. Henning Heitkötter

Java Einführung Methoden in Klassen

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Android will doch nur spielen. Java Eine kurze Einführung

Lohntabelle gültig ab 1. Januar 2016

Lohntabelle gültig ab 1. Januar 2015

Abschnitt 9: Schnittstellen: Interfaces

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Kapitel 6. Vererbung

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

XML-Namensräume. Marc Monecke

Szenario 3: Service mit erweiterter Schnittstelle

C# im Vergleich zu Java

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

5.6 Vererbung. Vererbung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Kapitel 10: Subklassen / Vererbung

Einführung in Javadoc

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

01. Grundprinzipien der Vererbung

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Java Einführung Packages

Teil 6: Klassenkonzept. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Gebundene Typparameter

Anwendungsentwicklung mit dem Windows Phone 7

C#-Workshop, Teil 2: C#-Objekte im Praxiseinsatz

5. Tutorium zu Programmieren

Programmieren Tutorium

Neue Features in C# 2.0

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Übersicht. Vorstellung des OO-Paradigmas

Factory Method (Virtual Constructor)

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Die Programmiersprache C99: Zusammenfassung

Algorithmen und Datenstrukturen 07

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Praktikum Compilerbau Sitzung 9 Java Bytecode

Objektorientierte Programmierung. Kapitel 16: Pakete, Zugriffsschutz

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

5 Projekt Bankverwaltung

CORBA. Systemprogrammierung WS

C/C++ Programmierung

8. Generics Grundlagen der Programmierung 1 (Java)

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Zur Erinnerung.

Klausur Kommunikationsnetze (KN) Sommersemester 2016 Musterklausur

Transkript:

Kapitel 7.3 Zugreifbarkeit Korbinian Molitorisz IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)

Zugreifbarkeit (Accessibility) Typen, Namensräume, die Elemente einer Klasse und vieles mehr unterliegt einem vom Compiler sichergestellten Zugriffsschutz Alle Elemente haben eine (kontextabhängige) Standard-Zugreifbarkeit Modifikator public protected internal protected internal private Bedeutung Access not limited Access limited to the containing class or types derived from the containing class Access limited to this program Access limited to this program or types derived from the containing class Access limited to the containing type Beachte: Zugreifbarkeit Sichtbarkeit! 2

Zugreifbarkeitsdomänen (ZD) Def.: Eine Zugreifbarkeitsdomäne einer Deklaration umfasst die Teile des gesamten Quellcodes, aus denen ein Zugriff auf diese Deklaration zulässig ist. Beispiel: Die ZD der vordefinierten Typen object und int ist unbeschränkt, es darf also von überall aus darauf zugegriffen werden. Für die Angabe der ZD benötigen wir folgende Definition: Ein Element befindet sich auf oberster Ebene (top level), wenn es nicht innerhalb eines Typs deklariert ist. Das ist i.d.r. ein Typ (z.b. eine Klasse) direkt in einem Namensraum. Erinnerung: Typen müssen nicht in Namensräumen deklariert werden! Ein Element wird als untergeordnet (nested) bezeichnet, wenn es innerhalb eines Typs deklariert ist. 3

Zugreifbarkeitsmodifikatoren Ein Typ auf oberster Ebene kann nur public oder internal sein. Die ZD eines Typs T auf oberster Ebene, der in einem Programm P definiert wird, ist: Bei public: die ZD von T ist der gesamte Quellcode von P und der Quellcode jedes Programms, das P verwendet. Bei internal: die ZD von T ist der gesamte Quellcode von P. 4

Beispiel Programm A Programm B public class P internal struct Q (nichts) interface R internal enum S Überall in A darf auf P und Q zugegriffen werden Überall in B darf auf P, R und S zugegriffen werden 5

Zugreifbarkeitsmodifikatoren Die ZD eines untergeordneten Elementes E*, definiert im Kontext des Typ T, der in einem Programm P definiert wird, ist wie folgt festgelegt: Ist E public, dann ist die ZD von E die von T. Programm P ZD(E) = ZD(T) Typ T public Element E * Hinweis: E könnte selbst auch ein Typ sein! 6

Zugreifbarkeitsmodifikatoren Die ZD eines untergeordneten Elementes E, definiert im Kontext des Typ T, der in einem Programm P definiert wird, ist wie folgt festgelegt: Ist E private, dann ist die ZD von E der Quellcode von T. Programm P ZD(E) = T Typ T private Element E 7

Zugreifbarkeitsmodifikatoren Die ZD eines untergeordneten Elementes E, definiert im Kontext des Typ T, der in einem Programm P definiert wird, ist wie folgt festgelegt: Ist E internal, dann ist die ZD von E der Schnitt der ZD von T mit dem Quelltext von P. Programm P ZD(E) = ZD(T) P Typ T internal Element E 8

Zugreifbarkeitsmodifikatoren Die ZD eines untergeordneten Elementes E, definiert im Kontext des Typ T, der in einem Programm P definiert wird, ist wie folgt festgelegt: Ist E protected, dann ist die ZD der Schnitt der ZD von T mit der Vereinigung des Quellcodes von T und jedem von T abgeleiteten Quellcode. Programm P ZD(E) = ZD(T) (T T ) Typ T protected Element E Typ T 9

Zugreifbarkeitsmodifikatoren Die ZD eines untergeordneten Elementes E, definiert im Kontext des Typ T, der in einem Programm P definiert wird, ist wie folgt festgelegt: Ist E protected internal, dann ist die ZD der Schnitt der ZD von T mit der Vereinigung des Quellcodes von P und jedem von T abgeleiteten Quellcode T. Programm P Typ T protected internal Element E ZD(E) = ZD(T) (P T ) Typ T Hinweis: T P 10

Einschränkungen und Standards der Zugreifbarkeitsfestlegung Namensräume sind implizit public. Dies kann nicht verändert werden. Typen auf oberster Ebene sind implizit internal. Sie dürfen als public oder internal deklariert werden. Die Elemente einer Klasse sind implizit private. Die Elemente einer Struktur sind implizit private. Sie dürfen als public, internal oder private deklariert werden. Die Elemente von Schnittstellen sind implizit public. Dies kann nicht verändert werden. Die Elemente von Aufzählungstypen sind implizit public. Dies kann nicht verändert werden. 11

Folgerungen Die ZD eines Typs auf oberster Ebene ist immer mindestens das Programm in dem er definiert wurde. Die ZD eines untergeordneten Elements ist immer mindestens der Quelltext des Typs, in dem das Element deklariert wurde. Die ZD eines untergeordneten Elements ist nie größer als die des umgebenden Typs (Schnittbildung!). 12

Übung public class A { internal class B { public class C { private class D { Wer darf zugreifen? Jeder Quelltext Nur der Quelltext des Programms, in dem die beiden Klassen deklariert wurden Nur der Quelltext von A Nur der Quelltext von B (beinhaltet den Quelltext von B.C und B.D!) Nur der Quelltext von B.C Nur der Quelltext von B.D 13

Hilfe Die ZD eines untergeordneten Elementes E*, definiert im Kontext des Typ T, der in einem Programm P definiert wird, ist wie folgt festgelegt: Ist E public, dann ist die ZD von E die von T. Ist E private, dann ist die ZD von E der Quellcode von T. Ist E internal, dann ist die ZD von E der Schnitt der ZD von T mit dem Quelltext von P. Ist E protected, dann ist die ZD der Schnitt der ZD von T mit der Vereinigung des Quellcodes von T und jedem von T abgeleiteten Quellcode. Ist E protected internal, dann ist die ZD der Schnitt der ZD von T mit der Vereinigung des Quellcodes von P und jedem von T abgeleiteten Quellcode T. 14

Lösung public class A { internal class B { public class C { private class D { Wer darf zugreifen? Jeder Quelltext Nur der Quelltext des Programms, in dem die beiden Klassen deklariert wurden Nur der Quelltext von A Nur der Quelltext von B (beinhaltet den Quelltext von B.C und B.D!) Nur der Quelltext von B.C Nur der Quelltext von B.D 15