Sichtbarkeit (Programmierung)

Die Sichtbarkeit gibt in der strukturierten und objektorientierten Programmierung an, in welchen Programmteilen die Bezeichnern von Datentypen, Variablen, Funktionen oder Konstanten sowie Prozeduren oder Methoden verwendet werden können, die in einer bestimmten Programmeinheit wie zum Beispiel einer Klasse oder einem Modul definiert wurden.[1]

Die Sichtbarkeitsregeln werden in den dazugehörigen Schnittstellen mit Hilfe von Zugriffsmodifikatoren festgelegt.[2] Die übliche Einteilung ist:[3]

  • öffentlich (Modifikator "public"), auf das Element darf von jeder anderen Klasse aus zugegriffen werden.
  • geschützt (Modifikator "protected"), auf das Element darf (üblicherweise) nur von derselben oder erweiternden Klassen aus zugegriffen werden.[4]
  • privat (Modifikator "private"), auf das Element darf nur innerhalb des definierenden Bereiches zugegriffen werden.

Um die Möglichkeit von versehentlichen Verwechslungen und Programmierfehlern zu begrenzen, empfiehlt es sich die Sichtbarkeiten von Bezeichnern so weit wie möglich einzuschränken (Abschattung).[2] In strukturierten Programmiersprachen beschränkt sich die Sichtbarkeit der Parameter und lokalen Variablen von Prozeduren, Funktionen und Methoden auf diese selbst.[5] Innerhalb des Sichtbarkeitsbereichs können Datentypen oder Prozeduren rekursiv referenziert werden.[5] Globale Variablen sind in der gesamten entsprechenden Programmeinheit (zum Beispiel in einem Programmpaket, in einem Modul oder in einer Klasse) sichtbar.

Viele Programmierer verwenden zur Erleichterung der Unterscheidbarkeit im Quelltext für lokale Variablen und für globale Variablen verschiedene Namenskonventionen, beispielsweise für lokale Variablen Bezeichner, die mit einem Kleinbuchstaben beginnen, und für globale Variablen Bezeichner, die mit einem Großbuchstaben beginnen.[6]

Definition

Bei den meisten Programmiersprachen gibt es drei Orte, an denen Variablen deklariert werden können:

  • In einer Funktion oder einem Block. Solche Variablen werden als lokale Variablen bezeichnet. Sie können nur innerhalb der Funktion oder dem Block verwendet werden.
  • Außerhalb aller Funktionen. Solche Variablen werden als globale Variablen bezeichnet. Sie können in allen Funktionen und Blöcken verwendet werden.
  • In der Definition von Funktionsparametern. Solche Variablen werden als formale Parameter bezeichnet. Sie können nur innerhalb der Funktion verwendet werden.

Variablen in C

Die folgenden Beispiele verwenden die Programmiersprache C.[7]

Variablen, die in einer Funktion oder einem Block deklariert sind, werden als lokale Variablen bezeichnet. Sie können nur von Anweisungen verwendet werden, die sich in dieser Funktion oder dem Block befinden. Das folgende Beispiel zeigt, wie lokale Variablen verwendet werden.

#include <stdio.h>

// Hauptfunktion
int main()
{
	// Deklaration der lokalen Variablen
	int a, b, c;

	// Initialisierung der lokalen Variablen
	a = 100001;
	b = 11;
	c = a / b; // Weist das Ergebnis der Division der Variablen c zu

	// Ausgabe auf der Konsole
	printf("Die Division lautet: %d / %d = %d\n", a, b, c);
}

Globale Variablen werden außerhalb einer Funktion definiert, und zwar in der Regel am Anfang des Programms. Globale Variablen behalten ihre Werte während der gesamten Laufzeit des Programms und können in einem der für das Programm definierten Funktionen aufgerufen werden. Auf eine globale Variable kann von jeder Funktion aufgerufen werden. Das heißt, eine globale Variable steht nach seiner Deklaration im gesamten Programm zur Verfügung. Das folgende Programm zeigt, wie globale Variablen verwendet werden.

#include <stdio.h>

// Deklaration der globalen Variable
int d;

// Hauptfunktion
int main()
{
	// Deklaration der lokalen Variablen
	int a, b;

	// Initialisierung der lokalen Variablen
	a = 100001;
	b = 9091;
	d = a / b; // Weist das Ergebnis der Division der globalen Variable d zu

	// Ausgabe auf der Konsole
	printf("Die Division lautet: %d / %d = %d\n", a, b, d);
}

Formale Parameter werden als lokale Variablen in einer Funktion behandelt und haben Vorrang vor globalen Variablen, wie folgendes Beispiel zeigt.

#include <stdio.h>

// Deklaration der globalen Variable
int b = 100001;

// Funktion, die den Quotienten von zwei ganzen Zahlen berechnet
int quotient(int a, int b)
{
	// Ausgabe auf der Konsole
	printf("Wert von a in der aufgerufenen Funktion: %d\n", a); // Gibt den formalen Parameter a aus
	printf("Wert von b in der aufgerufenen Funktion: %d\n", b); // Gibt den formalen Parameter b aus
	return a / b; // Gibt das Ergebnis der Division als Rückgabewert der Funktion zurück
}

// Hauptfunktion
int main()
{
	// Deklaration und Initialisierung der lokalen Variablen in der Hauptfunktion
	int a = 11;
	int c;

	// Ausgabe auf der Konsole
	printf("Wert von a in der Hauptfunktion: %d\n", a); // Gibt die lokale Variable a aus
	printf("Wert von b in der Hauptfunktion: %d\n", b); // Gibt die globale Variable b aus
	c = quotient(b, a); // Aufruf der Funktion, die den Quotienten berechnet
	printf("Wert von c in der Hauptfunktion: %d\n", c); // Gibt die lokale Variable c aus
}

Blöcke

In vielen, aber nicht allen blockstrukturierten Programmiersprachen kann der Gültigkeitsbereich auf einen Block beschränkt werden, der als Blockbereich bezeichnet wird. Meistens ist dieser Block in einer Funktion enthalten, wodurch der Bereich auf einen Teil einer Funktion beschränkt wird.

Ein repräsentatives Beispiel für die Verwendung des Blockbereichs ist der hier gezeigte Code in der Programmiersprache C, bei dem zwei Variablen auf die Schleife angewendet werden: die Schleifenvariable n, die einmal initialisiert und bei jeder Iteration der Schleife inkrementiert wird, und die Hilfsvariable n_squared, die wird bei jeder Iteration initialisiert.

unsigned int sum_of_squares(const unsigned int N)
{
    unsigned int ret = 0;
    for (unsigned int n = 1; n <= N; n++)
    {
        const unsigned int n_squared = n * n;
        ret += n_squared;
    }
    return ret;
}

Damit soll vermieden werden, dem Funktionsumfang Variablen hinzuzufügen, die nur für einen bestimmten Block relevant sind. Dies verhindert beispielsweise Fehler, bei denen die generische Schleifenvariable i versehentlich bereits auf einen anderen Wert gesetzt wurde. In diesem Beispiel würde der Ausdruck n * n im Allgemeinen keiner Hilfsvariablen zugewiesen, und der Körper der Schleife würde einfach ret += n * n geschrieben, aber in komplizierteren Beispielen sind Hilfsvariablen nützlich.

Blöcke werden hauptsächlich für den Kontrollfluss verwendet, z. B. mit if-Anweisungen, while-Schleifen und for-Schleifen. In diesen Fällen bedeutet Blockumfang, dass der Umfang der Variablen von der Struktur des Ausführungsflusses einer Funktion abhängt. Programmiersprachen mit Blockbereich erlauben jedoch typischerweise auch die Verwendung von "nackten" Blöcken, deren einziger Zweck darin besteht, eine fein abgestimmte Steuerung des variablen Bereichs zu ermöglichen. Beispielsweise kann eine Hilfsvariable in einem Block definiert, dann verwendet (beispielsweise zu einer Variablen mit Funktionsumfang hinzugefügt) und verworfen werden, wenn der Block endet, oder eine while-Schleife kann in einem Block eingeschlossen sein, der die innerhalb der Schleife verwendeten Variablen initialisiert das sollte nur einmal initialisiert werden.

Eine Feinheit mehrerer Programmiersprachen wie C besteht darin, dass Blockbereichsvariablen nicht nur innerhalb des Blockkörpers, sondern auch innerhalb der Steueranweisung deklariert werden können, wenn irgendein. Dies ist analog zu Funktionsparametern, die in der Funktionsdeklaration vor dem Start des Blocks des Funktionskörpers deklariert werden, und im Gültigkeitsbereich für den gesamten Funktionskörper. Dies wird hauptsächlich für Schleifen verwendet, deren Initialisierungsanweisung im Gegensatz zu while-Schleifen von der Schleifenbedingung getrennt ist, und ist eine gebräuchliche Redewendung.

Der Blockbereich kann zum Verdecken verwendet werden. In diesem Beispiel hätte die Hilfsvariable innerhalb des Blocks auch n heißen können, wodurch der Parametername verdeckt wird. Dies wird jedoch aufgrund der Möglichkeit von Fehlern als schlechter Stil angesehen. Darüber hinaus erlauben einige Nachfahren von C, wie Java und C#, trotz der Unterstützung des Blockbereichs nicht, dass eine lokale Variable eine andere versteckt, da eine lokale Variable vor dem Ende einer Funktion den Gültigkeitsbereich verlassen kann. In solchen Sprachen würde die versuchte Deklaration des zweiten n zu einem Syntaxfehler führen, und eine der Variablen müsste umbenannt werden.

Beispiel

Die Benutzung von Sichtbarkeiten kann beispielsweise folgendermaßen aussehen (PHP[8]):

<?php
class SampleClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    public function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj = new SampleClass();
echo $obj->public; // Funktioniert
echo $obj->protected; // Fataler Fehler
echo $obj->private; // Fataler Fehler
$obj->printHello(); // Zeigt Public, Protected und Private

Siehe auch

Literatur

Einzelnachweise

  1. https://www.rheinwerk-verlag.de/openbook/#mjf5b3fff9748ae6323d1923016a906a8f
  2. a b Schnittstellen, in: Strukturierte Programmierung, Wikibook, abgerufen am 6. September 2018
  3. Björn und Britta Petri: Modifikatoren, Java-Tutorial, 2010–2018, abgerufen am 6. September 2018
  4. https://www.php.net/manual/de/language.oop5.visibility.php
  5. a b Hanspeter Mössenböck, Niklaus Wirth: Declarations and scope rules, in: The Programming Language Oberon-2, Institut für Computersysteme, ETH Zürich, October 1993, abgerufen am 6. September 2018
  6. Variablen und Methoden, in: Strukturierte Programmierung, Wikibook, abgerufen am 6. September 2018
  7. tutorialspoint.com: C - Scope Rules
  8. PHP: Sichtbarkeit - Manual. Abgerufen am 28. August 2018.

Read other articles:

Romaine FieldingMotion Picture Magazine (Agustus 1915) Vol. X No.7, New YorkLahirWilliam Grant Blandin(1867-05-22)22 Mei 1867Riceville, IowaMeninggal16 Desember 1927(1927-12-16) (umur 60)Hollywood, CaliforniaKebangsaanAmerika SerikatNama lainRoyal A. BlandinPekerjaanPemeran Romaine Fielding (nama lahir William Grant Blandin, 22 Mei 1867 – 15 Desember 1927) adalah seorang pemeran, penulis naskah dan sutradara film bisu Amerika Serikat yang dikenal karena berkarya dal...

 

 

Australian music publication The MusicDrum Media cover of 25 September 2007 issueEditorDaniel CribbCategoriesMusicFrequencyMonthlyPublisherStreet Press AustraliaFirst issueSeptember 1990CountryAustraliaBased inMelbourneWebsitethemusic.com.au The Music (formerly known as and now incorporating Drum Media) is an online Australian music magazine. It previously existed as a street press devoted to long-form music journalism and commentary, music news, and artist interviews. In its printed form, it...

 

 

Pemandangan Lembah Napu Lembah Napu (Inggris: Napu Valley), adalah sebuah lembah yang meliputi wilayah desa Sedoa, Wuasa, Wanga dan Watutau di kecamatan Lore Utara dan Lore Peore, Kabupaten Poso, Sulawesi Tengah. Lembah ini merupakan wilayah penyangga dari Taman Nasional Lore Lindu pada wilayah kerja Taman Nasional Lore Lindu (TNLL) Bidang Pengelolaan Wilayah III Poso, dan berjarak sekitar 105 kilometer dari Kota Palu.[1] Wilayah Lembah Napu, bersama dengan beberapa kecamatan lain...

American trapper and second superintendent of Yellowstone National Park Philetus W. NorrisPhiletus Walter Norris in the pose of a trapperBorn(1821-08-17)August 17, 1821Palmyra, New YorkDiedJanuary 14, 1885(1885-01-14) (aged 63)Rocky Hill, KentuckyOccupation(s)Pioneer, park superintendentSpouseJane K. CottrellChildrenEdward, Aurelia, Ida and ArthurParent(s)John Norris, Jr. and Azubah Phelps Philetus W. Norris (August 17, 1821 – January 14, 1885) was the second superintendent of Yellowst...

 

 

此條目可参照英語維基百科相應條目来扩充。 (2021年5月6日)若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记{{Translated page}}标签。 约翰斯顿环礁Kalama Atoll 美國本土外小島嶼 Johnston Atoll 旗幟颂歌:《星條旗》The Star-Spangled Banner約翰斯頓環礁�...

 

 

Sri Lankan separatist military unit This article uses bare URLs, which are uninformative and vulnerable to link rot. Please consider converting them to full citations to ensure the article remains verifiable and maintains a consistent citation style. Several templates and tools are available to assist in formatting, such as reFill (documentation) and Citation bot (documentation). (September 2022) (Learn how and when to remove this message) Black Tigersகரும்புலிகள்Activ...

Airport in Crimea Simferopol International AirportМіжнародний аеропорт СімферопольМеждународный аэропорт СимферопольAqmescit Halqara Ava LimanıIATA: SIPICAO: UKFFSummaryAirport typePublicServesSimferopol, CrimeaElevation AMSL597 ft / 182 mCoordinates45°03′07″N 33°58′25″E / 45.05194°N 33.97361°E / 45.05194; 33.97361Websitenew.sipaero.ru/en/MapUKFFLocation of the airport in CrimeaSh...

 

 

  关于与「內閣總理大臣」標題相近或相同的条目页,請見「內閣總理大臣 (消歧義)」。 日本國內閣總理大臣內閣總理大臣紋章現任岸田文雄自2021年10月4日在任尊称總理、總理大臣、首相、阁下官邸總理大臣官邸提名者國會全體議員選出任命者天皇任期四年,無連任限制[註 1]設立法源日本國憲法先前职位太政大臣(太政官)首任伊藤博文设立1885年12月22日,...

 

 

Rugby playerTendai MtawariraMtawarira in 2008Full nameTendai MtawariraDate of birth (1985-08-01) 1 August 1985 (age 38)Place of birthHarare, ZimbabweHeight1.88 m (6 ft 2 in)Weight120 kg (260 lb; 18 st 13 lb)SchoolChurchill SchoolPeterhouse Boys' SchoolOccupation(s)Rugby union playerRugby union careerPosition(s) Loosehead PropSenior careerYears Team Apps (Points)2020 Old Glory DC 2 (0) Correct as of 5 December 2022Provincial / State sidesYears Team...

Keuskupan Agung MilwaukeeArchidioecesis MilvauchiensisKatolik LokasiNegaraAmerika SerikatProvinsi gerejawiMilwaukeeStatistikLuas4.758 sq mi (12.320 km2)Populasi- Total- Katolik(per 2013)2.369.000673,000 (28.4%)Paroki204Sekolah111Imam334InformasiDenominasiKatolik RomaRitusRitus LatinPendirian28 November 1843 (180 tahun lalu)Ditingkatkan menjadi Keuskupan Agung pada 12 Februari 1875KatedralCathedral of St. John the EvangelistPelindungSanto Yohanes PenginjilKep...

 

 

American voice actor and comedian For other people named George Lowe, see George Lowe (disambiguation). George LoweLowe in 2010Birth nameGeorge Edward LoweBorn (1957-11-10) November 10, 1957 (age 66)Dunedin, Florida, U.S.MediumActor, voice actor, screenwriter, executive producer, television, filmsNationalityAmericanYears active1980–presentGenresTelevision, filmsNotable works and rolesSpace Ghost Coast to CoastCartoon PlanetThe Brak Show George Edward Lowe (born November 10, 1957)&...

 

 

Multi-purpose stadium in Hamilton, Canada Tim Hortons FieldThe Donut Box [1]Tim Hortons Field interior, 2023Tim Hortons FieldLocation in OntarioShow map of Southern OntarioTim Hortons FieldLocation in CanadaShow map of CanadaAddress64 Melrose Avenue NorthLocationHamilton, Ontario, CanadaCoordinates43°15′7.612″N 79°49′48.359″W / 43.25211444°N 79.83009972°W / 43.25211444; -79.83009972OwnerCity of HamiltonOperatorHamilton Sports Group[2]Capacit...

Handgun and rifle cartridge loaded with lead shot CCI .22LR snake shot loaded with No. 12 shot Snake shot, rat shot, or dust shot,[1] more formally known as shotshell[2] (a name shared with the shotgun shell) or canister shot, refers to handgun and rifle cartridges loaded with lead shot canisters instead of bullets, intended for pest control (essentially small arms canister shot). As the names suggest, the main targets for such ammunition are snakes, rodents, birds, and other ...

 

 

Dalam nama Korean ini, nama keluarganya adalah Park. Park Joong-hoonPark Joong-hoon pada tahun 2017Lahir22 Maret 1966 (umur 58)Seoul, Korea SelatanPekerjaanAktorTahun aktif1986–sekarangAgenNamoo Actors[1] Park Joong-hoonHangul박중훈 Alih AksaraBak Jung-hunMcCune–ReischauerPak Chunghun Park Joong-hoon (lahir 22 Maret 1966[2]) adalah aktor Korea Selatan. Filmografi Televisi Tahun Judul Peran Catatan 2017 Bad Guys 2 Woo Je-moon Referensi ^ Heo Seol-hee (February ...

 

 

Gianluca Zambrotta Gianluca ZambrottaInformasi pribadiNama lengkap Gianluca ZambrottaTanggal lahir 19 Februari 1977 (umur 47)Tempat lahir Como, ItaliaTinggi 1,81 m (5 ft 11+1⁄2 in)Posisi bermain BekKarier senior*Tahun Tim Tampil (Gol)1994–1997 Como 48 (6)1997–1999 Bari 59 (6)1999–2006 Juventus 217 (6)2006–2008 Barcelona 58 (3)2008–2012 AC Milan 85 (2)Tim nasional‡1999–2010 Italia 98 (2) Prestasi Sepak bola Mewakili  Italia Piala Dunia FIFA Pemenan...

Formula racing series NACAM Formula 4 ChampionshipCategoryFIA Formula 4CountryMexicoRegionCentral AmericaCaribbeanInaugural season2015ConstructorsMygale (2015–2023)Tatuus (2024)Engine suppliersFord (2015–2023)Fiat (2024)Tyre suppliersPirelliDrivers' champion Pedro Juan MorenoOfficial websitehttps://www.fiaformula4.mx Current season The North and Central American (NACAM) Formula 4 Championship is a formula racing series run to FIA Formula 4 regulations. The inaugural season was held over 2...

 

 

Primo ministro della Repubblica d'Iraq (AR) رئيس وزراء العراق (KU) سەرۆک وەزیرانی عێراقStemma dell'Iraq Mohammed Shia' Al Sudani, attuale Primo ministro della Repubblica d'Iraq Stato Iraq TipoCapo del governo In caricaMohammed Shia' Al Sudani da28 ottobre 2022 Istituito11 novembre 1920 Nominato daPresidente dell'Iraq Durata mandatoquattro anni, rinnovabili[1] SedePalazzo Repubblicano, Baghdad Sito webwww.pmo.iq/ Modifica dati su Wikidata · Manual...

 

 

この記事の出典や参考文献は、一次資料や記事主題の関係者による情報源に頼っています。 信頼できる第三者情報源とされる出典の追加が求められています。出典検索?: GnuCash – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2019年12月) GnuCash GnuCash 2.2.3 のスクリーンショット開発元 The GnuCash ...

German mechanical engineer Ludwig FöpplFöppl on the western front during World War IBorn27 February 1887 (1887-02-27)Berlin, German EmpireDied13 May 1976(1976-05-13) (aged 89)Münster, West GermanyCitizenshipGermanEducationUniversity of GöttingenScientific careerFieldsMathematicsEngineeringCryptologyThesis Stabile Anordnungen von Elektronen im Atom  (1912) Doctoral advisorDavid HilbertDoctoral studentsHarald Ludvig Westergaard Rector of the Technical University of MunichIn o...

 

 

Ice hockey player Peter Draisaitl Draisaitl in 2008 as coach of EVR Tower StarsBorn (1965-12-07) 7 December 1965 (age 58)Karviná, CzechoslovakiaHeight 6 ft 0 in (183 cm)Weight 190 lb (86 kg; 13 st 8 lb)Position CentreShot LeftPlayed for Mannheimer ERCKölner HaieMoskitos EssenRevierlöwen OberhausenNational team  West Germany and GermanyNHL draft UndraftedPlaying career 1983–2001 Peter Draisaitl (born 7 December 1965) is a German ...