Zugriff auf Methodenergebnisse?

Was sind denn Variablen, die nicht überschrieben werden können? Konstanten, genau. Oder hast Du schon wieder eine andere Definition?
Konsultieren wir doch einfach mal ein Wörterbuch:
Variable kommt von variabel, also veränderbar. Konstante kommt von konstant, also gleichbleibend. Alle weiteren Diskussionen darüber sind Blödsinn. ;)

Das ist keine Konstante, sondern eine Präprozessoranweisung, mit der alle Vorkommen von dem Text TRUE im Sourcecode durch 1 (Literal) ersetzt werden, bevor der eigentliche Compiler drüberläuft.

Dann als Gegenfrage, was sind dann Variablen, auf die von überall her zugegriffen werden kann?
Auf statische Variablen einer Klasse kann man nur im Zusammenhang mit der Klasse zugreifen, also nicht einfach von überall. Eine globale Variable kann man auch ohne die Klasse nutzen.
Gerade du als Smalltalk-Liebhaber solltest dir doch klar darüber sein, dass solche Dinge gerade bei Singleton-Klassen genutzt werden können.
Ganz davon abgesehen sollte man eine Variable nicht als public static deklarieren, sondern nur mit Zugriffsmethoden arbeiten, um sauberes OO-Design auf die Beine zu stellen.

PS: Wegen meinem zusammengehampelten Ausdruck der "globalen Klassenvariable" - damit meinte ich schon eine Membervariable, aber irgendwie fiel mir der Begriff gerade nicht ein. :rolleyes:
 
Ich würd ja auch spass an der Freude weiter diskutieren - besonder warum Variablen variabel sind - auch wenn sie es nicht sind, aber sinn für das Forum bringt das nicht mehr - müsste wenn dann in's Fun-Forum.
 
Hallo!

Auf statische Variablen einer Klasse kann man nur im Zusammenhang mit der Klasse zugreifen, also nicht einfach von überall. Eine globale Variable kann man auch ohne die Klasse nutzen.
Gerade du als Smalltalk-Liebhaber solltest dir doch klar darüber sein, dass solche Dinge gerade bei Singleton-Klassen genutzt werden können.

Code:
public class Singleton{
	private static Singleton instance;

	// Wir wollen ja schon weiter davon ableiten können ;-)
        // wenn nicht dann private
	protected Singleton(){ 
		....	
	}

	public static Singleton getInstance(){
		if(instance==null){
			instance = new Singleton();
		}
		return instance;
	}

	...

}

... "Ohne Klassen nutzen"?

und wie besorge ich mir eine Instanz? -> Singleton.getInstance();
Versuch das mal ohne Klasse ;-)

Gruß Tom

Ps.: Ich sehe es schon kommen das wird wieder ein Flamewar ...
 
Original geschrieben von Dario Linsky
Konsultieren wir doch einfach mal ein Wörterbuch:
Variable kommt von variabel, also veränderbar. Konstante kommt von konstant, also gleichbleibend. Alle weiteren Diskussionen darüber sind Blödsinn. ;)

Findest Du? Vermutlich hast Du recht. :)
Aber klär uns doch mal auf:
Gibt es lt Deiner Definition also keine Konstanten in Java?
Und worin besteht der Unterschied zwischen Konstanten und unveränderlichen Variablen?
 
Klar Tom, genau das meinte ich doch. Das sind ja auch keine globalen Variablen bzw. Methoden in diesem Fall. Es gibt einige Sprachen (ich weiß nicht, ob Smalltalk dazugehört), bei denen es trotz wirklich durchgehender OO-Strukturen globale Variablen gibt - Ruby z.B. - aber in Java gibt es diese eben nicht.

Ich würd ja auch spass an der Freude weiter diskutieren - besonder warum Variablen variabel sind - auch wenn sie es nicht sind, aber sinn für das Forum bringt das nicht mehr - müsste wenn dann in's Fun-Forum.
Mach nur, ich verschieb es derweil mal ins Coders Talk. :)
 
Also meiner Meinung nach gibt es Grundsätzlich drei Arten von Konstanten in Java
nämlich :

Ersetzungskonstanten -> public static final double MWST = 0.16d;
Bitfelder -> AWTEventMask ...
OptionsFelder -> Siehe JOptionPane...

Gruß Tom
 
Original geschrieben von Snape
Findest Du? Vermutlich hast Du recht. :)
Aber klär uns doch mal auf:
Gibt es lt Deiner Definition also keine Konstanten in Java?
Und worin besteht der Unterschied zwischen Konstanten und unveränderlichen Variablen?
Natürlich gibt es Konstanten in Java, warum sollte es sie nicht geben? Aber was sollen denn bitte "unveränderliche Variablen" sein? Das ist doch ein Widerspruch in sich: wenn etwas unveränderlich ist, kann es nicht mehr variabel sein.
 
Original geschrieben von Dario Linsky
Konsultieren wir doch einfach mal ein Wörterbuch:
Variable kommt von variabel, also veränderbar. Konstante kommt von konstant, also gleichbleibend. Alle weiteren Diskussionen darüber sind Blödsinn. ;)
und was sind dann mittels final deklarierte Variablen? Die sind nicht wirklich variabel. Und in C++ wenn das const weggecastet wird? Dann sind die Konstanten plötzlich Variable (schlechter Stil, ich weiss, aber es geht ja nur um's Prinzip)

Original geschrieben von Dario Linsky
Das ist keine Konstante, sondern eine Präprozessoranweisung, mit der alle Vorkommen von dem Text TRUE im Sourcecode durch 1 (Literal) ersetzt werden, bevor der eigentliche Compiler drüberläuft.
Korrekt - aber letztenendes ist es ein konstanter Wert, der nicht geändert wird und auf den ich von überall her zugreifen kann. Was auch die einzige Unterscheidung ist, auf const Variablen kann ich nicht zwingend von überall zugreifen.

Original geschrieben von Dario Linsky
Auf statische Variablen einer Klasse kann man nur im Zusammenhang mit der Klasse zugreifen, also nicht einfach von überall. Eine globale Variable kann man auch ohne die Klasse nutzen.
korrekt - aber von denen habe ich auch nicht gesprochen - ich habe nach Variablen gefragt, die ich von überall her ändern kann und lesen kann. Das sind in Java nur öffentliche statische Variablen - nur statisch kann man nicht von überall her lesen/schreiben, daher sind sich sicher nicht global.

Original geschrieben von Dario Linsky
Gerade du als Smalltalk-Liebhaber solltest dir doch klar darüber sein, dass solche Dinge gerade bei Singleton-Klassen genutzt werden können.
In Smalltalk gibt es keine öffentlichen Membervariablen. Und keine privaten Methoden (Ausnahme glaube ich Squeak). Es gibt Poolvariablen und globale - aber damit habe ich mich noch nicht beschäftigt - man braucht sie eigentlich nicht.
Statische Variablen ist was anderes - die gibt es eigentlich auch nicht - man unterscheidet in ST Klassenvariablen (entspricht den statischen Membervariablen in Java) und Instanzvariablen (entspricht Membervariablen in Java) - aber das ist ein anderes Thema.

Original geschrieben von Dario Linsky
Ganz davon abgesehen sollte man eine Variable nicht als public static deklarieren, sondern nur mit Zugriffsmethoden arbeiten, um sauberes OO-Design auf die Beine zu stellen.
ACK

P.S.: Kein Flamewar - dann würden wir uns Beleidigen - aus dem Alter sind wir raus. Wir sind ja eigentlich alle einer Meinung, aber es macht Spass sich über die minimalen Differenzen zu unterhalten.
 
Hallo,

Also ich war immer der Meinung das die Begriffe Member- und Instanzvariable synonyme sind und static declarierte Variable egal welchen access modifierer sie besitzt dann immer als Klassenvariable zu sehen (und zu nennen ) sind. AFAIK ist das auch die allgemeine Nomenklatur in der Literatur.

Gruß Tom
 
Original geschrieben von Thomas Darimont
Hallo,

Also ich war immer der Meinung das die Begriffe Member- und Instanzvariable synonyme sind und static declarierte Variable egal welchen access modifierer sie besitzt dann immer als Klassenvariable zu sehen (und zu nennen ) sind. AFAIK ist das auch die allgemeine Nomenklatur in der Literatur.

Es bestreitet ja auch niemand, ST hat eine ein wenig andere Nomenklatur - das sollte nicht das Problem sein, aber in Java hast du sicher recht. Allerdings gilt zusätzlich, dass Variablen, welche aus egal welchem Kontext heraus gelesen und geändert werden können, allgemein als globale Variablen bezeichnet werden. Nun erfüllen public static Variablen (welche Klassenvariablen sind) genau diese Voraussetzungen und wären somit ebenfalls globale Variablen.

So seh ich das zumindest. Meiner Meinung nach schließt sich das nicht aus.
 

Neue Beiträge

Zurück