Hi,
was genau ist eine Instanz beim Programmieren? Wenn ich z.B. die
Variable "name" habe, kann die dann mehrere Instanzen haben?
Oder wenn ich eine Funktion habe zum Berechnen eines Wertes und diese
Funktion mehrfach aufrufe, dann ist ja diese Funktion "mehrfach" im
Speicher vorhanden, z.B.
struct Datensatz {...}
Datensatz1 = Datensatz
Datensatz2 = Datensatz
Datensatz3 = Datensatz
Könnte ich jetzt sagen, dass ich von struct Datensatz drei Instanzen
habe, weil das Objekt dreimal im Speicher vorhanden ist, nur mit
unterschiedlichen Werten?
Instanzia schrieb:> was genau ist eine Instanz beim Programmieren? Wenn ich z.B. die> Variable "name" habe, kann die dann mehrere Instanzen haben?
ja, und zwar entweder dadurch, daß sich die Funktion rekursiv selbst
aufruft ("automatische Variablen" liegen auf dem Stack), oder indem die
Funktion in mehreren Threads verwendet wird.
Zumindest gilt das bei aktuell üblichen Sprachen, in Fortran 77 dagegen
sind alle Variablen statisch und nur einmal vorhanden, weswegen man dort
keine Rekursion machen darf.
>> Oder wenn ich eine Funktion habe zum Berechnen eines Wertes und diese> Funktion mehrfach aufrufe, dann ist ja diese Funktion "mehrfach" im> Speicher vorhanden, z.B.>> struct Datensatz {...}>> Datensatz1 = Datensatz> Datensatz2 = Datensatz> Datensatz3 = Datensatz
? Verstehe ich nicht.
Wenn du Datensatz an 3 verschiedene andere Variablen zuweist, dann hast
du ein Original und 3 Kopien, aber nicht mehrere Instanzen einer
Variablen.
>> Könnte ich jetzt sagen, dass ich von struct Datensatz drei Instanzen> habe, weil das Objekt dreimal im Speicher vorhanden ist, nur mit> unterschiedlichen Werten?
Wieso unterschiedliche Werte?
So wie ich das sehe sind Instanzen vor allem bei Klassen:
Also du hast die Klasse "Single", wenn du nun:
Single T = ...;
schreibst hast du eine Instanz der Klasse Single.
Wenn du jetzt allerdings:
Single T = ...;
Single R = ...;
Dann hast du zwei Instanzen.
Wichtig ist das halt vor allem bei Programmierkonzepten wie z.B. dem
"Singleton".
Das selbe ist auch bei dir bei der Funktion der Fall wenn du eine
Funktion mehrfach aufrufst hast du mehrere Instanzen, was wieder wichtig
ist wenn in der Funktion eine statische Variable ist die zwischen den
Aufrufen im Speicher gehalten wird.
MfG
Fer T. schrieb:> Dann hast du zwei Instanzen.
So isses. Bei OO bewirkt die Definition der Klasse zunächst mal
garnichts ausser dass sie dem Compiler bekannt ist, erst wenn man eine
Variable der Klasse vereinbart, wird Speicherplatz eingerichtet für eben
diese Instanz der Klasse. Davon kann es natürlich viele geben, i.A. ist
es so, dass der Programmcode der Klasse nur einmal vorhanden ist, die
zugehörigen Daten aber für jede Instanz/Variable extra, um Platz zu
sparen, aber ich würde mich da nicht für alle der vielen hundert
Programmiersprachen drauf festlegen. Das ist auch nur wichtig, wenn man
den Speicherbedarf berechnen will.
Georg
>dann ist ja diese Funktion "mehrfach" im>Speicher vorhanden
nein, nur einmal
und von Funktionen gibt es auch keine Instanzen
ruft man eine Funktion "mehrfach" (rekursiv) auf, sind nur die (lokalen)
variablen mehrfach im Speicher (im stack)
Ganz allgemein würde ich in der Programmierung eine Instanz als Exemplar
einer Klasse definieren, wobei der Begriff der Klasse ebenso allgemein
zu sehen ist.
Beispiele für Klassen und Instanzen in unterschiedliche Kontexten:
1
Klasse Instanz
2
———————————————————————
3
Variablentyp Variable
4
Funktionstyp Funktion
5
Objektklasse Objekt
6
Typklasse Typ
7
———————————————————————
Die Liste der Beispiele lässt sich sicher noch erweitern.
Nach meinem Wissen wird der Begriff "Instanz" im Zusammenhang mit der
Programmierung verwendet, seit es Multitasking bzw. Windows-OOP gibt. Es
geht dabei auch darum, was passieren soll, wenn der Benutzer eine schon
geöffnete Anwendung ein weiteres Mal startet. In WinAPI hatte früher das
Programmfenster die Eigenschaft hPrevInstance, das Instanz-Handle eines
zuvor schon geöffneten Fensters desgleichen Programms. War kein solches
vorhanden, so war das Handle gleich 0. Übrigends: Schon bei GEM-Desktop,
einer Grafikoberfläche mit Fenstern, wurden geöffnete Anwendungen,
Dokumente u.a. zuweilen als Instanz bezeichnet.
Yalu X. schrieb:> Ganz allgemein würde ich
Na so schlecht ist die Erklärung bei Wikipedia ja nun auch nicht, die
deutsche Version ist villeicht etwas knapp.
http://en.wikipedia.org/wiki/Instance_(computer_science)
Hast Du Dir eigentlich schon mal Rust und Nimrod angesehen? Haskell ist
für mich momentan ein "etwas zu großer Brocken" und der praktische
Nutzen erscheint mir auch nicht wirklich groß.
Stefan S. schrieb:> Hast Du Dir eigentlich schon mal Rust und Nimrod angesehen?
Ja, gestern.
Ich habe dazu einen neuen Thread angefangen:
Beitrag "Rust oder Nimrod als neue Hobbyprogrammiersprache?"
Danke noch für den Tipp von damals. Aus eigenem Antrieb hätte ich mich
wahrscheinlich nicht weiter mit diesen Sprachen beschäftigt ;-)
Yalu X. schrieb:> Typklasse Typ
Das würde ich weglassen, weil die Vereinbarung eines Typs überhaupt
nichts bewirkt, jedenfalls in keiner Sprache die ich kenne. Erst wenn
man eine Variable des Typs vereinbart, den Typ also "benutzt", entsteht
etwas Reales im Speicher.
Richtiger wäre also, die Variable ist eine Instanz des Typs, aber das
sagt niemand so weil es zu selbstverständlich ist. Ich sehe das so weil
ich meine, eine Instanz müsste etwas Reales sein, Juristen sehen das
vielleicht anders :-)
Georg
Ob "etwas Reales im Speicher" entsteht ist völlig egal.
Typklassen sind Schemata für eine ganze Reihe von Typen. Und der
einzelne Typ ist dann eine Instanz davon, doch, das kann man schon
sagen.
Das ist völlig analog zu Klassen und Objekten. Oder Metaklassen und
Klassen.
Instanzia schrieb:> was genau ist eine Instanz beim Programmieren?
Der Begriff »Instanz« wird in der Regel beim OO verwendet. Du hast eine
Klasse, rufst den Konstruktor auf (new), und nun hast du von dieser
Klasse … ein Exemplar.
Unsinnigerweise wird es aber meist »Instanz« genannt. Das ist im
Deutschen in diesem Zusammenhang unverständlich. Es ist eine wörtliche
Fehlübersetzung des englischen »instance«. Im englischen paßt das
schon, dort sagt man ja auch »for instance« synonym für »for example«,
so daß die Semantik stimmt. Im deutschen tut sie das aber nicht und
deshalb ist »Instanz« ganz einfach falsch, da gibt es nix zu
beschönigen.
Die korrekte Übersetzung lautet »Exemplar«.
Die korrekte Übersetzung ist die, die etwa 100% der Sprachverwender
wählen. Und das ist nunmal "Instanz".
Dein Vergleich mit "for instance" ist ohnehin irreführend.
>Im deutschen tut sie das aber nicht und>deshalb ist »Instanz« ganz einfach falsch, da gibt es nix zu>beschönigen.>Die korrekte Übersetzung lautet »Exemplar«.
Da haben die englischsprachigen Entwickler auf jeden Fall bessere
Karten.
Wenn ich programmiere, schreibe ich alle Kommentare in Englisch, damit
die Programme auch international verstanden werden können.
Meiner Meinung nach wäre es aber besser, man könnte alles in Deutsch
schreiben, weil das nun einmal die Sprach ist, in der wir denken.
Für die "native Speaker" ( upss, jetzt fange ich schon mit dem Denglisch
an ) ist es auch viel einfacher die ganzen Klassenblbiliotheken zu
verstehen.
Wer weiß den schon intuitiv was ein Panel, ein Template oder ein Pattern
ist?
und vielleicht noch mit Umlauten..
NEIN bitte nicht
schon mal Excel verwendet..?
diese SCH.. deutschen Funktionsnahmen..
wer ist nur auf so einen Blödsinn gekommen..
Panel = Tafel??
wer soll jetzt "intuitiv" wissen was eine Tafel ist?
Das Problem bei der Verwendung englischsprachiger Begriffe durch
nicht-englischsprachige Programmierer ist, daß die
nicht-englischsprachigen Programmierer teilweise sehr individuelle
Vorstellungen davon haben, was die englischsprachigen Begriffe bedeuten
mögen, und sie dadurch bedingt in einer für des Englischen tatsächlich
mächtigen bzw. Muttersprachler höchst verwirrenden Weise einsetzen.
Das tritt insbesondere auf, wenn Begriffe, die Synonyme sind, in einem
Kontext mit unterschiedlichen Bedeutungen besetzt werden.
marc schrieb:> Meiner Meinung nach wäre es aber besser, man könnte alles in Deutsch> schreiben
Die Kommentare kannst du ja schreiben wie du willst bzw. wie deine Firma
es verlangt. aber ein Programm wie "Für i = 1 ... Nächstes i" ist
unbrauchbarer Mist.
Ich verfahre da nach folgender Logik: Programmbefehle sind Englisch ->
also wähle ich englische Variablen- und Funktionsnamen -> dann schreibe
ich auch den Kommentar dazu in Englisch, weil das sonst höchst albern
klingt.
Wenn ich als Deutscher einen komplexen Sachverhalt in Englisch
formulieren kann, habe ich ihn wahrscheinlich auch verstanden.
Georg
Nun ist es ja auch so, dass wenn man gut Englisch spricht und eine
großes Vokabular hat, es einem von anderen abhebt.
Ich habe früher viele Fachbücher in Englisch gelesen und auch einige
Dinge in Englisch geschrieben. Heute bin ich allerdings der Meinung,
dass man in der eigenen Sprache viel besser denken kann und eine bessere
Intuition hat.
Der Nutzen der englischen Sprache zeigt sich in der weltweiten
Kommunikation. Für das eigene Denken ist es aber eine Behinderung.
Machbar, aber es kostet mindestens 30% der sonst anderweitig
verwendbaren geistigen Resourcen.
>schon mal Excel verwendet..?>diese SCH.. deutschen Funktionsnahmen..>wer ist nur auf so einen Blödsinn gekommen..
Ja, ich weiß, das fand ich auch ziemlich nervig. ein IF ist ja auch viel
kürzer als ein WENN.
>aber ein Programm wie "Für i = 1 ... Nächstes i" ist>unbrauchbarer Mist.
Das scheint mir nur Gewohnheit zu sein. Ein FÜR ist ja nicht länger als
ein FOR. Umlaute im Compiler wären überhaupt sehr lustig.
marc schrieb:> Umlaute im Compiler wären überhaupt sehr lustig.
Moderne Sprachen haben oft Unicode als Eingabezeichensatz, da kommt ein
echtes lambda schon cool für Lambda-Funktionen. :-)
marc schrieb:>>schon mal Excel verwendet..?>>diese SCH.. deutschen Funktionsnahmen..>>wer ist nur auf so einen Blödsinn gekommen..>> Ja, ich weiß, das fand ich auch ziemlich nervig. ein IF ist ja auch viel> kürzer als ein WENN.
In früheren Versionen von Excel wurden die verwendeten deutschen
Schlüsselwörter direkt in der XLS-Datei gespeichert. Eine mit dem
deutschen Excel erstellte Datei konnte somit nicht mit einem englischen
Excel geöffnet werden und umgekehrt. Irgendwann sind die MS-Helden dann
auf die Idee gekommen, dass es genügt, für jedes Schlüsselwöort ein
Token abzulegen, was das obige Problem behebt und zudem Speicher spart.
Fritz schrieb:> Die korrekte Übersetzung ist die, die etwa 100% der Sprachverwender> wählen. Und das ist nunmal "Instanz".
Doppelt falsch. Erstens wird ein Fehler durch Wiederholung nicht
richtig. Zweitens hätte ein sprachkundiger Anwender in diesem
Zusammenhang »instance« nicht mit »Instanz« übersetzt. Es hat sich halt
eingebürgert, aber es ist nicht intuitiv verständlich, wofür unter
anderem der OP ein Indiz darstellt. Ich erinner mich aber selber, wie
ich Mühe hatte zu kapieren, was nun beim OO eine »Instanz« sein soll,
und wie das Wort auch bei anderen Probleme verursacht hat, denen ich es
zu erklären versuchte. Der das damals übersetzt hat, konnte halt weder
gut genug englisch noch deutsch, sonst wär ihm das nicht passiert.
> Dein Vergleich mit "for instance" ist ohnehin irreführend.
Du hast ihn dann wohl nicht verstanden.
Im übrigen geht's doch nicht darum, Schlüsselwörter einzudeutschen (wie
bei Excel). Englisch eignet sich besser als Deutsch zum Substrat für
Programmiersprachen, weil es eine schwach flektierene Sprache ist und
einen größeren Lateinanteil im Wortschatz hat. Ist ja auch nur ein
Krüppelenglisch, was man da so benutzt … IF, FOR, WHILE … Soll mir
keiner erzählen, das sei eine Sprache.
Manchmal ist halt die Fachlichkeit deutsch definiert. Und dann kommt
irgendein Eumel und sucht mit LEO lauter englische Übersetzungen und das
Resultat ist großer Käse, weil er halt dachte, englisch ist besser, aber
selber gar nicht gut genug englisch konnte. Naja, und die exotischen
Begriffe, die dabei herumkommen, sorgen regelmäßig für Stirnrunzeln und
Mißverständnis, aber die sind dann in den API Stein gemeißelt. :)
Und ich stimme demjenigen zu, der hier meinte, auch wenn man sehr gut
englisch spricht, hat man damit 30 % geistige Mehrkosten. Mindestens.
Und die meisten haben deutlich höhere Mehrkosten, auch wenn es ihnen
vielleicht gar nicht bewußt ist. Hab ich oft gesehen, daß die Vorgabe
von oben, alles auf englisch abzufassen, für eine drastische Reduktion
der Doku sorgt, die überhaupt abgefaßt wird. Operation gelungen, Patient
tot.
Hab auch die Leute nie verstanden, die trotz mittelmäßiger eigener
Englischkenntnisse alles englisch machen wollen. Wozu, um sich durch
einen ukrainischen oder indischen Dienstleister ersetzbar zu machen? Mir
ein Rätsel.
Micha Lu schrieb:>> Die korrekte Übersetzung ist die, die etwa 100% der Sprachverwender>> wählen. Und das ist nunmal "Instanz".>> Doppelt falsch. Erstens wird ein Fehler durch Wiederholung nicht> richtig.
Wie immer in der Linguistik lacht man über Präskriptivisten wie dich.
Linguistik wird deskriptiv betrieben.
Und das kann man hier 1:1 drauf anwenden.
Michael schrieb:> Micha Lu schrieb:>>> Die korrekte Übersetzung ist die, die etwa 100% der Sprachverwender>>> wählen. Und das ist nunmal "Instanz".>>>> Doppelt falsch. Erstens wird ein Fehler durch Wiederholung nicht>> richtig.>> Wie immer in der Linguistik lacht man über Präskriptivisten wie dich.> Linguistik wird deskriptiv betrieben.
Da klingst du aber reichlich präskriptiv. :)
Ich hab ein paar Sprachen studiert und lache daher über Linguisten! :)
Linguistik (die ahistorische) ist aufgeblasene Fremdwortschieberei ohne
Erkenntnisgewinn. Ein Rangierbahnhof für Worthülsen. Hat mit Sprache
nicht viel zu tun, eher mit Legosteinchen.
> Micha Lu
Du sprichst mir aus dem Herzen. Ich hätte nicht gedacht, dass es in der
Hinsicht Leute gibt, die ähnlich denken.
Hier noch ein schöner Beispielsatz aus einem englischen Lehrbuch, das
ich zur Zeit lese:
"In other forms, there is a supraesophageal ganglion giving rise to
dorsal and ventral longitudonal cords connected by commisural tracts".
Na, alles klar?
marc schrieb:> "In other forms, there is a supraesophageal ganglion giving rise to> dorsal and ventral longitudonal cords connected by commisural tracts".
Naja, Marc, hier scheint es um die Artikulation zu gehen … auch wenn das
schon wie eine Parodie klingt. Da führte dem Autor offenbar der Wille
zum Fremdwort die Feder; das hätt man sicher einfacher sagen können.
Immerhin ist Artikulation wichtig und manche Menschen leiden, wenn sie
ihnen nicht gelingt; allerdings ist das meiner Meinung nach eine eher
praktische als theoretische Frage (Gehör und Mundwerk schulen).
Ich hob eher ab auf die sogenannte »generative Transformationsgrammatik«
… :)
Robert L. schrieb:> diese SCH.. deutschen Funktionsnahmen..> wer ist nur auf so einen Blödsinn gekommen..
Oh, ich erinnere mich noch an Diskussionen in der 1980er Jahren, in
denen einige Leute forderten, dass in Deutschland nur noch
Programmiersprachen mit deutschen Schlüsselwörtern verwendet werden
sollten. Es gab auch SAAKA(*)-Dialekte für den Schulunterricht, die
alles viel einfacher machen sollten. Taten sie aber nicht.
Einige früher Assemblersprachen, z.B. für Zuse-Rechner, basieren auf der
deutschen Sprache, ebenso auch einige Konventionen bei Siemens-SPS, z.B.
E für Eingang und A für Ausgang.
Den Vogel abschießen tun aber Begriffe wie
"Prozesssignalformersteuerung" aus der Prozessrechentechnik.
(*): "Symbolischer Allzweckanweisungskode für Anfänger" = BASIC
Micha Lu schrieb:> Die korrekte Übersetzung lautet »Exemplar«.
Schönen dank, das macht das ganze endlich mal klar.
Fritz schrieb:> Die korrekte Übersetzung ist die, die etwa 100% der Sprachverwender> wählen. Und das ist nunmal "Instanz".
Das würde ich jetzt mal eher mit "gebräuchliche" Übersetzung
umschreiben. Korrekt ist etwas anderes, eine Instanz ist im deutschen
ein Verfahrensabschnitt was man von einer Variable wohl kaum behaupten
kann.
Andreas Schweigstill schrieb:> Oh, ich erinnere mich noch an Diskussionen in der 1980er Jahren, in> denen einige Leute forderten, dass in Deutschland nur noch> Programmiersprachen mit deutschen Schlüsselwörtern verwendet werden
Was ja sinnlos ist da man die Bedeutung dieser Worte so oder so lernen
muss und gleich das original nehmen kann.
Etwa anderes ist die Begriffserklärung. Da hilft es wenig darauf
rumzureiten das min. 110% aller Fachleute diesem oder jenen verwenden.
Vor allem nicht wenn er nur Sinn macht wenn man die Bedeutung schon
kennt.
Mein Liebligstransformer ist regular expressions. Die 110% Fachleute
machen daraus "reguläre Ausdrücke" was außerhalb mathematischer
Fakultäten exakt 0,0% Sinn macht.
X4U schrieb:> Mein Liebligstransformer ist regular expressions. Die 110% Fachleute> machen daraus "reguläre Ausdrücke" was außerhalb mathematischer> Fakultäten exakt 0,0% Sinn macht.
In diesem Fall finde ich die englische und die deutsche Version etwa
gleich gut bzw. schlecht. Aber fast jeder, der sich mit diesen Dingern
ernsthaft beschäftigt, sagt sowieso nur "regex" :)
Micha Lu schrieb:> Linguistik (die ahistorische) ist aufgeblasene Fremdwortschieberei ohne> Erkenntnisgewinn.
Weil es auch nur diese gibt.
Guck mal über deinen Tellerrand.
gerade das verwenden von "neuen" Wörter (also eigentlich alte Wörter mit
neuer Bedeutung) ist doch sehr Praktisch
gibt es doch überall diese "Fachwörter" (das verstehen dann eben nur die
"vom Fach" warum das Praktisch ist..)
sagt man Instanz, weiß jeder was gemeint ist
Exemplar könnte alles mögliche sein ..
(abgesehen davon, ist Deutsch immer noch eine lebende Sprache, da kommen
eben manchmal Wörter/Bedeutungen hinzu... "Handy" z.b. )
Micha Lu schrieb:> Naja, und die exotischen> Begriffe, die dabei herumkommen, sorgen regelmäßig für Stirnrunzeln und> Mißverständnis, aber die sind dann in den API Stein gemeißelt
Achja, Klassiker bei KOMA-Script: "pointednumbers" und
"pointlessnumbers".
Kommt vor :-)
Walter Tarpan schrieb:> Achja, Klassiker bei KOMA-Script: "pointednumbers" und> "pointlessnumbers".
In der Doku von KOMA-Script steht seit einiger Zeit eine entsprechende
Anmerkung:
1
Note that the opposite of pointednumbers is not pointlessnumbers!
Dumm ist halt, dass man, wenn so eine Software erst einmal im Umlauf
ist, der Optionsname nicht mehr ohne weiteres ändern kann :)
Auch bei den Fans vom "point-free programming style" ist die (dort aber
absichtliche) Verwechslung mit "pointless" längst zu einem Running Gag
geworden.