C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Einführung in C(++) für Benutzer anderer Sprachen?
Goto page Previous  1, 2, 3, 4  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Daniel Albuschat
Guest





PostPosted: Wed Aug 30, 2006 2:33 pm    Post subject: Re: Einfuehrung in C(++) für Benutzer ander er Sprachen? Reply with quote



Stefan Ram wrote:
Quote:
Daniel Albuschat <daniel (AT) happy (DOT) viming.de> writes:

Im Konzept jedoch sind Objekte "Exemplare", wie du es passend
ausgedrückt hast, einer Klasse.


In der Spezifikation steht:

»An object is a region of storage. (...)
An object has a type«

ISO/IEC 14882:2003(E), 1.8

Was ist dann eigentlich bei Fällen wie

struct Empty {};

int main() {
Empty nichts;
}

Solche Fälle hat man ja gerade für Funktoren des Öfteren.
Benennt ''nichts'' dann kein Objekt?

"A region of storage of size 0" wäre ja echt witzlos.
Und auch "An object has a type" finde ich dämlich, gerade
bei unions.

MfG,
Daniel
Back to top
Dirk Jagdmann
Guest





PostPosted: Wed Aug 30, 2006 3:41 pm    Post subject: Re: Einführung in C(++) für Benut zer anderer Sprachen? Reply with quote



Hallo Wolfgang,

Buchempfehlungen haben ja schon einige andere gegeben. Ich möchte nur
noch dazu einwerfen, dass du dich beim Lesen auf Bücher vom Verlag
Addison-Wesley (bzw Pearson Publications) beschränken kannst, denn
dieser Verlag hat die besten (rennomierstesten Autoren) der C/C++ Szene
unter Vertrag. Das Spektrum der C/C++ Bücher von AW deckt auch vom
Anfänger bis zum Profi alle Schwierigkeiten ab. Ob du dann die
englischen Orginalausgaben liest oder die bei manchen Titeln vorhandenen
deutschen Übersetzungen wählst bleibt dir überlassen. Aber es lohnt sich
meistens die Bücher auf Englisch zu lesen, da es dann einfach am
wenigsten Probleme mit falsch oder garnicht übersetzten Fachbegriffen
gibt und die Begriffe in C/C++ orientieren sich nun mal am Englischen.


--
---> Dirk Jagdmann ^ doj / cubic
----> http://cubic.org/~doj
-----> http://llg.cubic.org
Back to top
Wolfgang Keller
Guest





PostPosted: Wed Aug 30, 2006 4:38 pm    Post subject: Re: Einführung in C(++) für Benutzer anderer Sprachen? Reply with quote



Quote:
Die korrekte Ausrede ist, dass der OP nur APIs lesen will, die er in
Python einbindet, und die Wahrscheinlichkeit, auf ein C++-API zu stoßen,
immer noch lächerlich gering ist (eben weil C der kleinste gemeinsame
Nenner für Aufrufschnittstellen ist).

Zwei für mich relevante Gegenbeispiele:

- PyQt (keinerlei Python-spezifische Dokumentation)
- wxPython

MfG,

Wolfgang Keller

--
My email-address is correct.
Do NOT remove ".nospam" to reply.
Back to top
Stefan Ram
Guest





PostPosted: Wed Aug 30, 2006 5:57 pm    Post subject: Re: Einfuehrung in C(++) für Benutzer anderer Sprachen? Reply with quote

Daniel Albuschat <daniel (AT) happy (DOT) viming.de> writes:
Quote:
Was ist dann eigentlich bei Fällen wie
struct Empty {};

»3 For every object x, there is some object called the
complete object of x, determined as follows:

- If x is a complete object, then x is the complete object
of x.

- Otherwise, the complete object of x is the complete
object of the (unique) object that contains x.

4 If a complete object, a data member, or an array element
is of class type, its type is considered the most derived
class, to distinguish it from the class type of any base
class subobject; an object of a most derived class type is
called a most derived object.

5 Unless it is a bit-field, a most derived object shall
have a non-zero size and shall occupy one or more bytes of
storage. Base class sub-objects may have zero size.«

ISO/IEC 14882:2003(E), 1.8

Quote:
Und auch "An object has a type" finde ich [nicht gut], gerade
bei unions.
[Zitat wurde von mir (S.R.) in der eckigen Klammer verändert.]


»1 Some objects are polymorphic; the implementation
generates information associated with each such object
that makes it possible to determine that object's type
during program execution. For other objects, the
interpretation of the values found therein is determined
by the type of the expressions used to access them.«

ISO/IEC 14882:2003(E), 1.8

Der Typ eines Objekts muß nicht immer statisch bekannt sein.
Allerdings ist C++ nicht so streng typisiert, so daß man
sich tatsächlich Situationen vorstellen kann, in denen man
den Typ eines Objekts nicht kennt.
Back to top
Stefan Ram
Guest





PostPosted: Wed Aug 30, 2006 6:05 pm    Post subject: Re: Einfuehrung in C(++) fuer Benutzer anderer Sprachen? Reply with quote

Wolfgang Keller <wolfgang.keller.nospam (AT) gmx (DOT) de> writes:
Quote:
Deshalb: Was gibt es an guter Einführungsliteratur in C(++)

ISBN 3-8273-7029-9.
ANDREW KOENIG / BARBARA E. MOO : Intensivkurs C++.
Das oft empfohlene C++ -Lehrbuch "Accelerated C++ " liegt
nun in deutscher Übersetzung vor.
URI http://www.pearson-studium.de/main/main.asp?page=bookdetails&ProductID=13537

ISBN 3-8273-1660-X.
STROUSTRUP, BJARNE : Die C++ Programmiersprache.
Das Lehrbuch und Nachschlagewerk zu C++ vom Erfinder der
Sprache. 99,90 DM gebunden, als Paperback ca. 30 DM
weniger. Addison-Wesley, 2000.
Deutsche Übersetzung der "special edition" von NICOLAI JOSUTTIS und ACHIM LÖRKE

ISBN 0-201-48518-4
Essential C++
by STANLEY B. LIPPMAN
Addison-Wesley Pub Co ; 1999
An introduction to C++ for experienced programmers.

ISBN 0-201-53393-6
Scientific and Engineering C++
An Introduction with Advanced Techniques and Examples
by BARTON & NACKMAN
Addison-Wesley

Siehe auch:

http://www.purl.org/stefan_ram/pub/c++_quellen_de
http://www.purl.org/stefan_ram/pub/c++_resources_en
Back to top
Stefan Ram
Guest





PostPosted: Wed Aug 30, 2006 6:20 pm    Post subject: Re: Einfuehrung in C(++) für Benutzer anderer Sprachen? Reply with quote

ram (AT) zedat (DOT) fu-berlin.de (Stefan Ram) writes:
Quote:
If x is a complete object,

PS: »An object that is not a sub-object of any other object is
called a complete object.«
Back to top
Stefan Ram
Guest





PostPosted: Wed Aug 30, 2006 6:28 pm    Post subject: Re: Einfuehrung in C(++) für Benutzer anderer Sprachen? Reply with quote

ram (AT) zedat (DOT) fu-berlin.de (Stefan Ram) writes:
Quote:
Daniel Albuschat <daniel (AT) happy (DOT) viming.de> writes:
Was ist dann eigentlich bei Fällen wie
struct Empty {};
5 Unless it is a bit-field, a most derived object shall
have a non-zero size and shall occupy one or more bytes of
storage. Base class sub-objects may have zero size.«

PS: Nach »Empty e;« ist »e«, wie ich es verstehe, ein maximal
abgeleitetes Objekt und sollte eine nichtverschwindende Größe haben.
Wieso das von Comeau ohne Fehlermeldung akzeptiert wird,
ist mir nicht klar. Vielleicht wird in solchen Fällen
automatisch ein Füllobjekt eingefügt? Es könnte sein,
daß dazu noch an anderee Stelle der Norm etwas steht.
Back to top
Ernst Sauer
Guest





PostPosted: Wed Aug 30, 2006 6:56 pm    Post subject: Re: Einführung in C(++) für Benutzer anderer Sprachen? Reply with quote

kanze wrote:
Quote:
Ernst Sauer wrote:
kanze wrote:

Aber hast du richtig gutes C gelernt?

Profiprogrammier würden vermutlich sagen nein,
aber für mich ist das wichtigste, dass ich meinen
eigenen Mist nach Wochen und Monaten noch verstehe.
Deshalb schreibe ich die - durchaus großen - Programme
in einer möglichst einfachen Form.

Vermutlich ist das auch der Knackpunkt im Hinblick
auf die Beurteilung des Buches "C-Befehlsbibliothek".
Vielleicht behandelt Schildt nur die einfacheren Dinge,
bei denen man nicht viel falsch machen kann.

Ich habe einen Freund, der ist absoluter C++ Profi
und der zerreisst immer meinen Programmierstil,
das fängt schon bei der Namensgebung der Variablen an.
Seine Argumente sind immer überzeugend,
aber wenn er an einem meiner Beispiele mal konkret
werden soll, dann dauert es Ewigkeiten bis hinten mal
was rauskommt.

Mit Gruß
Ernst Sauer
Back to top
Stefan Reuther
Guest





PostPosted: Wed Aug 30, 2006 9:49 pm    Post subject: Re: Einfuehrung in C(++) für Benutzer ander er Sprachen? Reply with quote

Stefan Ram wrote:
Quote:
Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:
Genauso, wie ich
Instanzen / Exemplare / Objekte einer Klasse anlegen kann, kann ich auch
Instanzen / Exemplare / Objekte eines fundamentalen Typs anlegen.

Die C++-Norm spricht hier von "Objekten".

Nein, von 'objects'. Und darum, wie man die englische Terminologie des
Standards möglichst anfängerkompatibel mit der etablierten, auch
teilweise deutschen, OOP-Terminologie verheiratet, geht es u.U. in
diesem Thread.

Ich bin z.B. mit dem Begriff "Instanz" aufgewachsen. OOP habe ich mit
dem Turbo-Pascal-Handbuch gelernt, welches "Instanzen" von "Objekttypen"
kennt. Das Wort "Klasse" taucht darin nicht auf.

Quote:
Ob der Compiler das dann in einer 'region of storage' oder im
Kühlschrank ablegt, ist dafür vollkommen zweitrangig.

Das habe ich bereits in dem Posting, auf das Du gerade
antwortest, widerlegt.

IBTD. Zu den Eigenschaften eines Objektes, außer dem einzelnen Satz
'...is a region of storage', war da nichts.

Quote:
Die Frage bestimmter Bytewerte hat nun mit der Klärung des
Begriffs "object" auch nicht mehr viel zu tun.

Sag ich doch. Nur dass die 'region of storage' eben genau die
Bytewerte sind.

Du darfst den Speicher nicht mit seinem Inhalt verwechseln:

Ein Byte/wert/ ist beispielsweise 0x07.

Du hast den Begriff "Bytewerte" gebracht, als ich von Adressen sprach,
die ich verwendete, um der Speicherregion eine Bezeichnung zu geben.

Quote:
Durch die Typisierung wird Speicher in den
Sprachspezifikationen auch meist auf einer höheren Schicht
behandelt: Speicher enthält dort in der Regel keine
"Bytewerte", sondern Werte eines bestimmten Typs, z.B.
int-Werte, im Falle eines int-Objekts.

Eben. Und an der Stelle ist dann vollkommen unerheblich, ob dieser auf
einer höheren Schicht betrachtete Speicher irgendwelche 'regions of
storage' enthält, oder ob der Compiler beschließt, die Members des
Objektes (wie in Perl) in einem Hash zu speichern. Das interessiert
einen Normalprogrammierer nicht. In 90% aller Fälle muss man nur wissen,
dass man nach
struct X { int i; int j; };
und
X some_x;
mit 'some_x.i' und 'some_x.j' auf zwei int-Werte zugreifen kann. Dass
die irgendwo in einem zusammenhängenden Stück Speicher stehen, wie das
(in 1.8 direkt für PODs, indirekt später über die Eigenschaften von z.B.
placement-new) gefordert ist, ist dafür vollkommen egal.

Quote:
In Java ist /was/ nicht relevant?

Dass ein Objekt eine 'region of storage' ist.

Es geht hierbei doch um ein fundamentales Konzept
zustandsbasierter Sprachen, nämlich den zeitlich
veränderlichen Wertspeicher.

*Das* ist was ganz anderes als das, was in 1.8 steht. Sowas wird z.B. in
1.9p10 gefordert ("[...] Such an object exists and retains its last
stored value [...]").

Quote:
Wie ich schon schrieb, gibt es dort diesen Begriff ebenfalls,
nur daß er in Java "variable" genannt wird.

Woran machst du fest, dass es "dieser Begriff" ist, wo er doch
anders heißt und was anderes bedeutet?

Das hatte ich doch hier nun gerade gepostet.

Ich wiederhole es nun noch einmal:

Vergleiche doch einmal die beiden folgenden Auszüge aus
den Spezifikationen und denke Dir dabei die Worte "object"
und "variable" durch "..." ersetzt:

»An object is a region of storage. (...)
An object has a type«

ISO/IEC 14882:2003(E), 1.8

»Variables are typed storage locations.«

The Java-language specification 3, chapter 1

Simpel.
new String()
ergibt in Java keine Variable, sondern eine 'instance' eines
Klassentyps. In C++ ergibt
*(new java::lang::String())
aber sehr wohl ein Objekt.


Stefan
Back to top
Stefan Reuther
Guest





PostPosted: Wed Aug 30, 2006 9:55 pm    Post subject: Re: Einfuehrung in C(++) für Benutzer ander er Sprachen? Reply with quote

Stefan Ram wrote:
Quote:
ram (AT) zedat (DOT) fu-berlin.de (Stefan Ram) writes:
Daniel Albuschat <daniel (AT) happy (DOT) viming.de> writes:
Was ist dann eigentlich bei Fällen wie
struct Empty {};

5 Unless it is a bit-field, a most derived object shall
have a non-zero size and shall occupy one or more bytes of
storage. Base class sub-objects may have zero size.«

PS: Nach »Empty e;« ist »e«, wie ich es verstehe, ein maximal
abgeleitetes Objekt und sollte eine nichtverschwindende Größe haben.
Wieso das von Comeau ohne Fehlermeldung akzeptiert wird,
ist mir nicht klar. Vielleicht wird in solchen Fällen
automatisch ein Füllobjekt eingefügt? Es könnte sein,
daß dazu noch an anderee Stelle der Norm etwas steht.

Die Größe darf nie Null sein. Da aber das Definieren und Verwenden einer
leeren Klasse nicht verboten ist, muss der Compiler ein Füllbyte einfügen.


Stefan
Back to top
Stefan Ram
Guest





PostPosted: Thu Aug 31, 2006 3:01 am    Post subject: Re: Einfuehrung in C(++) für Benutzer anderer Sprachen? Reply with quote

Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:
Quote:
Nein, von 'objects'. Und darum, wie man die englische Terminologie des
Standards möglichst anfängerkompatibel mit der etablierten, auch
teilweise deutschen, OOP-Terminologie verheiratet, geht es u.U. in
diesem Thread.

Es geht in dieser Runde erst einmal um C++-Terminologie
und -Programmierung.

Außerdem ist es naheliegend, das Wort "object" mit
"Objekt" zu übersetzen und "instance" mit "Exemplar".

Quote:
Ob der Compiler das dann in einer 'region of storage' oder im
Kühlschrank ablegt, ist dafür vollkommen zweitrangig.
Das habe ich bereits in dem Posting, auf das Du gerade
antwortest, widerlegt.
IBTD. Zu den Eigenschaften eines Objektes, außer dem einzelnen Satz
'...is a region of storage', war da nichts.

Dies ist die Definition von "object" und damit die
vornehmste Eigenschaft eines Objekts.

Quote:
Eben. Und an der Stelle ist dann vollkommen unerheblich, ob dieser auf
einer höheren Schicht betrachtete Speicher irgendwelche 'regions of
storage' enthält, oder ob der Compiler beschließt, die Members des
Objektes (wie in Perl) in einem Hash zu speichern.

Wir sprechen hier nun aber gerade einmal von C++ und nicht von
Perl.

Eines der fundamentalen Dinge beim Lernen des Programmierens
ist ein int-Objekt. Einen int-Wert speichert man mit C++
normalerweise in einem int-Objekt, mag dies beim Eintritt in
einen Block erzeugt oder Teil eines Klassenexemplars sein.
Deine oben zitierte Ausführung sehe ich nicht als Widerspruch
dazu an.

Quote:
Das interessiert
einen Normalprogrammierer nicht. In 90% aller Fälle muss man nur wissen,
dass man nach
struct X { int i; int j; };
und
X some_x;
mit 'some_x.i' und 'some_x.j' auf zwei int-Werte zugreifen kann. Dass
die irgendwo in einem zusammenhängenden Stück Speicher stehen, wie das
(in 1.8 direkt für PODs, indirekt später über die Eigenschaften von z.B.
placement-new) gefordert ist, ist dafür vollkommen egal.

Ich hatte schon geschrieben, wann man den Begriff auch
in einfachen Fällen braucht.

Quote:
Es geht hierbei doch um ein fundamentales Konzept
zustandsbasierter Sprachen, nämlich den zeitlich
veränderlichen Wertspeicher.
*Das* ist was ganz anderes als das, was in 1.8 steht. Sowas wird z.B. in
1.9p10 gefordert ("[...] Such an object exists and retains its last
stored value [...]").

Da siehst Du ja nun selbst, wie fundamental der Begriff
"object" in C++ ist! Denn um dies von Dir Zitierte verstehen
zu können, muß man ja erst einmal wissen, was "object"
bedeutet. Insbesondere auch, daß es nicht ein Exemplar einer
Klasse sein muß.

In einem Kurs sollen Teilnehmer ja nicht nur Programme
schreiben lernen, sondern auch etwas von der spezifischen
Terminologie einer Sprache kennenlernen. Im Falle eines
sehr langen Kurses so weitgehend, daß sie schließlich
selber die Norm lesen können, im Falle eine kurzen Kurses
wenigstens als ein Schritt in diese Richtung.

Quote:
Wie ich schon schrieb, gibt es dort diesen Begriff ebenfalls,
nur daß er in Java "variable" genannt wird.
Woran machst du fest, dass es "dieser Begriff" ist, wo er doch
anders heißt und was anderes bedeutet?
»An object is a region of storage. (...)
An object has a type«
ISO/IEC 14882:2003(E), 1.8
»Variables are typed storage locations.«
The Java-language specification 3, chapter 1

A>Simpel.
B>new String()
B>ergibt in Java keine Variable, sondern eine 'instance' eines
B>Klassentyps. In C++ ergibt
B>*(new java::lang::String())
B>aber sehr wohl ein Objekt.

Der mit "B" gekennzeichnete Text ist sachlich zutreffend.
Allerdings verstehe ich nicht, was Du im Lichte des
vorangegangenen Dialogs damit sagen willst.

Der mit "A" gekennzeichnete Text wird vom verbundenen Duden so
erklärt:

Si.m|pel, der; -s, - (landsch. ugs.):
einfältiger, beschränkter Mensch; Einfaltspinsel.

http://app.mr-check.de/Mrcheck.php?CL=zeit&SP=Simpel

Seine Bedeutung an dieser Stelle ist mir unverständlich.
Mir wäre ein Satz mit Subjekt und Prädikat verständlich,
im Gegensatz zu diesem prädikatlosen Einwortsatz.
Back to top
Jörg Barfurth
Guest





PostPosted: Thu Aug 31, 2006 1:13 pm    Post subject: Re: Einfuehrung in C(++) für Benutzer ander er Sprachen? Reply with quote

Stefan Ram schrieb:
Quote:
Stefan Reuther <stefan.news (AT) arcor (DOT) de> writes:
Nein, von 'objects'. Und darum, wie man die englische Terminologie des
Standards möglichst anfängerkompatibel mit der etablierten, auch
teilweise deutschen, OOP-Terminologie verheiratet, geht es u.U. in
diesem Thread.

Es geht in dieser Runde erst einmal um C++-Terminologie
und -Programmierung.

Ja. Aber es gibt durchaus mehr als eine C++-Terminologie. Die

Terminologie des Standards ist nicht dieselbe wie die, die meist
verwendet wird, um über C++-Programmierung zu sprechen.

Um ein Beispiel aus dieser Diskussion wieder aufzugreifen: Ein
Autofahrer benutzt andere Terminologie um den gleichen Sachverhalt zu
beschreiben, als ein Autokonstrukteur. Eine bessere Analogie ist das
Rechtswesen: Um juristische Sachverhalte darzustellen, benutzt der Laie
eine andere Terminologie als Gesetzestexte. Wenn(!) es um die Klärung
juristischer Fragestellungen geht, dann sind die Gesetzestexte relevant
- aber als Laie konsultiere ich da besser einen Fachmann. Für meinen
Alltag ist es sinnvoller hinreichende Annäherungen and die präzisen
Regeln in Alltagssprache zu verwenden. Und der Fachmann hat hier auch
die Aufgabe diese Übertragung zu leisten.

Quote:
Außerdem ist es naheliegend, das Wort "object" mit
"Objekt" zu übersetzen und "instance" mit "Exemplar".


Natürlich. Aber auch im Englischen wird 'object' von Programmierern
meist in einer Weise gebraucht, die nicht mit der des Standard identisch
ist - oder in mehreren, je nach Kontext.

Quote:
Ob der Compiler das dann in einer 'region of storage' oder im
Kühlschrank ablegt, ist dafür vollkommen zweitrangig.
Das habe ich bereits in dem Posting, auf das Du gerade
antwortest, widerlegt.
IBTD. Zu den Eigenschaften eines Objektes, außer dem einzelnen Satz
'...is a region of storage', war da nichts.

Dies ist die Definition von "object" und damit die
vornehmste Eigenschaft eines Objekts.


Dies ist allerdings keine vollständige Definition. Nicht jede "region of
storage" ist ein Objekt. Und, vornehm oder nicht, es tatsächlich eine
Eigenschaft die für Programmierer - zumal Neulinge - ziemlich irrelevant
ist.

Darüber hinaus wird unter Programmierern der Begriff Objekt oft in einem
anderen Sinn gebraucht, der durch den Objektbegriff der
objektorientierten Programmierung geprägt ist. Gerade für Umsteiger von
anderen Programmiersprachen die OOP unterstützen ist dieser Begriff
leichter zugänglich.

Quote:
Eben. Und an der Stelle ist dann vollkommen unerheblich, ob dieser auf
einer höheren Schicht betrachtete Speicher irgendwelche 'regions of
storage' enthält, oder ob der Compiler beschließt, die Members des
Objektes (wie in Perl) in einem Hash zu speichern.

Wir sprechen hier nun aber gerade einmal von C++ und nicht von
Perl.

Eines der fundamentalen Dinge beim Lernen des Programmierens
ist ein int-Objekt. Einen int-Wert speichert man mit C++
normalerweise in einem int-Objekt, mag dies beim Eintritt in
einen Block erzeugt oder Teil eines Klassenexemplars sein.
Deine oben zitierte Ausführung sehe ich nicht als Widerspruch
dazu an.


Ihr redet aneinander vorbei, da du eine andere Bedeutung von 'Objekt'
verwendest als Stefan. In einem sprachdefinitorischen Kontext ist deine
Verwendung von (C++-)Objekt richtig und sinnvoll. Im Programmieralltag,
erlebe ich es aber extrem selten, dass diese Bedeutung verwendet wird:
Meist sprechen Leute von int-Variablen, -Membern, etc. oder einem "int
auf dem Heap".

Quote:
Das interessiert
einen Normalprogrammierer nicht. In 90% aller Fälle muss man nur wissen,
dass man nach
struct X { int i; int j; };
und
X some_x;
mit 'some_x.i' und 'some_x.j' auf zwei int-Werte zugreifen kann. Dass
die irgendwo in einem zusammenhängenden Stück Speicher stehen, wie das
(in 1.8 direkt für PODs, indirekt später über die Eigenschaften von z.B.
placement-new) gefordert ist, ist dafür vollkommen egal.

Ich hatte schon geschrieben, wann man den Begriff auch
in einfachen Fällen braucht.


Man braucht ihn auch da nicht unbedingt. Wenn 'Objekt' droht mit dem
OOP-Begriff zu kollidieren ("int-Objekte gibt es in Smalltalk aber nicht
in C++"), dann ist 'int-Lvalue' potentiell präziser als dein
'int-Objekt'. Aber ich gebe zu, dass bei der Beschreibung von
C++-Konzepten wie "Subobjekt", dein 'Objekt'-Begriff das Verständnis
erhöht. Wenn man sich bewusst ist, das dieser Begriff von der anderen
(OOP-)Wortbedeutung verschieden ist, dann kann man auch beide Begriffe
verwenden.

Das bedeutet aber, dass es nicht zwingend (oder auch nur sinnvoll) ist
zu fordern, dass beim Diskutieren von C++-Programmierung nur einer der
Begriffe zulässig sei. Das folgt schon daraus, dass dieses Thema
nahtlose Übergänge sowohl zur allgemeinen oder OOP-Programmierung als
auch zur legalistischen C++-Sprachdefinition hat.


Quote:
Es geht hierbei doch um ein fundamentales Konzept
zustandsbasierter Sprachen, nämlich den zeitlich
veränderlichen Wertspeicher.
*Das* ist was ganz anderes als das, was in 1.8 steht. Sowas wird z.B. in
1.9p10 gefordert ("[...] Such an object exists and retains its last
stored value [...]").

Da siehst Du ja nun selbst, wie fundamental der Begriff
"object" in C++ ist! Denn um dies von Dir Zitierte verstehen
zu können, muß man ja erst einmal wissen, was "object"
bedeutet. Insbesondere auch, daß es nicht ein Exemplar einer
Klasse sein muß.


Allerdings zeigte der OP dieses Threads keinerlei Ambitionen so tief in
die C++-Sprachdefinition vorzudringen, dass er die Norm lesen und
verstehen müsste.

Quote:
In einem Kurs sollen Teilnehmer ja nicht nur Programme
schreiben lernen, sondern auch etwas von der spezifischen
Terminologie einer Sprache kennenlernen.

Es gibt durchaus C++-spezifische Terminologie, die unter Programmiern
gängig ist und die man als Lernender kennenlernen sollte. Häufig werden
hierbei tatsächlich dieselben Begriffe wie im Standard verwendet. Das
bedeutet nicht das man die Terminologi des Standards komplett übernehmen
muss. Wer OOP in C++ lernt sollte halt auch OOP-Terminologie kennen
lernen. Um bei 'Objekt' ist der OOP-Begriff halt der gängigere.

Quote:
Im Falle eines
sehr langen Kurses so weitgehend, daß sie schließlich
selber die Norm lesen können, im Falle eine kurzen Kurses
wenigstens als ein Schritt in diese Richtung.


Ich denke, auch ausführliche Kurse in C++ sollten im Allgemeinen nicht
als Ziel haben, dass man die Norm selbstständig lesen kann. Analog würde
auch eine tiefgehende Einführung in die deutsche Alltagskultur und
Sprache (etwa für Migranten) nicht das Ziel haben die selbstständige
Lektüre von juristischen Texten zu ermöglichen; lediglich ein
Grundverständnis von Behördendeutsch sollte enthalten sein. Für weniger
tiefgehendes Interesse (etwa für Touristen) wäre auch das unerheblich;
hier wäre nur gängige Alltagssprache relevant.

Quote:
Wie ich schon schrieb, gibt es dort diesen Begriff ebenfalls,
nur daß er in Java "variable" genannt wird.
Woran machst du fest, dass es "dieser Begriff" ist, wo er doch
anders heißt und was anderes bedeutet?
»An object is a region of storage. (...)
An object has a type«
ISO/IEC 14882:2003(E), 1.8
»Variables are typed storage locations.«
The Java-language specification 3, chapter 1

A>Simpel.
B>new String()
B>ergibt in Java keine Variable, sondern eine 'instance' eines
B>Klassentyps. In C++ ergibt
B>*(new java::lang::String())
B>aber sehr wohl ein Objekt.

Der mit "B" gekennzeichnete Text ist sachlich zutreffend.
Allerdings verstehe ich nicht, was Du im Lichte des
vorangegangenen Dialogs damit sagen willst.


Deine Zitate enthalten keine vollständigen Definitionen der Begriffe
'object' (C++) oder 'variable' (Java). Daher ist der Schluss, den du aus
der Gleichheit der teilweisen Definitionen ziehst, unzulässig.

Nicht jede "typed storage location" in Java ist eine Variable.
Insbesondere ist ein anonymes Exemplar einer Klasse keine 'variable' in
Java, während das C++-Equivalent durchaus ein 'object' - auch in deinem
Sinne - ist.

Dies belegt, dass 'variable' eben nicht derselbe Begriff "in Java" (d.h.
in einem zu definierenden Java-bezogenn Sprachgebrauch) ist, wie
'object' (in dem von Dir propagierten C++-Norm-bezogenen Sinne).

Alle weiteren darauf basierenden Argumente sind damit auch hinfällig.

Quote:
Der mit "A" gekennzeichnete Text wird vom verbundenen Duden so
erklärt:

Si.m|pel, der; -s, - (landsch. ugs.):
einfältiger, beschränkter Mensch; Einfaltspinsel.

http://app.mr-check.de/Mrcheck.php?CL=zeit&SP=Simpel


Seine Bedeutung an dieser Stelle ist mir unverständlich.
Mir wäre ein Satz mit Subjekt und Prädikat verständlich,
im Gegensatz zu diesem prädikatlosen Einwortsatz.

Es gibt 'simpel' auch als Adjektiv mit der Bedeutung 'einfach' (gleiche
Referenz - Bedeutung 2 dürfte hier relevant sein). Davon ausgehend lese
ich "Simpel." hier als Verkürzung von "Das ist simpel.". 'Simpel' ist
hier also das von dir vermisste Prädikat. Diese Form der Verkürzung ist
in der deutschen Umgangssprache durchaus gängig: "Super!", "Klar.", ...

- Jörg
Back to top
Stefan Ram
Guest





PostPosted: Thu Aug 31, 2006 4:11 pm    Post subject: Re: Einfuehrung in C(++) für Benutzer anderer Sprachen? Reply with quote

Jörg Barfurth <usenet05 (AT) barfurth (DOT) de> writes:
Quote:
Ja. Aber es gibt durchaus mehr als eine C++-Terminologie. Die
Terminologie des Standards ist nicht dieselbe wie die, die meist
verwendet wird, um über C++-Programmierung zu sprechen.

In den meisten Runden des Usenet zu Programmiersprachen, die
ich kenne, folgt man der Terminologie der Sprachspezifikation.
Ich dachte bis vor kurzem, dies sei auch in dieser Runde so
üblich.

Quote:
Natürlich. Aber auch im Englischen wird 'object' von
Programmierern meist in einer Weise gebraucht, die nicht mit
der des Standard identisch ist - oder in mehreren, je nach
Kontext.

Das will ich mir nicht unbedingt zum Vorbild nehmen.

Quote:
Dies ist allerdings keine vollständige Definition. Nicht jede
"region of storage" ist ein Objekt. Und, vornehm oder nicht, es
tatsächlich eine Eigenschaft die für Programmierer - zumal
Neulinge - ziemlich irrelevant ist.

Dein erster Satz stimmt. Aber der zweite ist mir überhaupt
nicht nachvollziehbar. Anfänger benutzen Variablen, und
Variablen sind Namen für Objekte. Wie kann das für Neulinge
"irrelevant" sein?

Quote:
Ihr redet aneinander vorbei, da du eine andere Bedeutung von
'Objekt' verwendest als Stefan.

Ich bemühe mich in dieser Runde darum, die Bedeutung der
C++-Spezifikation zugrundezulegen.

Quote:
Im Programmieralltag, erlebe ich es aber extrem selten, dass
diese Bedeutung verwendet wird: Meist sprechen Leute von
int-Variablen, -Membern, etc. oder einem "int auf dem Heap".

Was alles nicht genau das gleiche ist wie ein int-Objekt.
Sonst habe ich nichts gegen die Verwendung der Bezeichnung
"int-Variable", aber nicht jedes int-Objekt ist eine
int-Variable.

Quote:
Man braucht ihn auch da nicht unbedingt. Wenn 'Objekt' droht
mit dem OOP-Begriff zu kollidieren ("int-Objekte gibt es in
Smalltalk aber nicht in C++"), dann ist 'int-Lvalue' potentiell
präziser als dein 'int-Objekt'.

"Linkswert" ist ja nun auch wieder nicht derselbe Begriff wie
ein "Objekt".

Quote:
Das folgt schon daraus, dass dieses Thema nahtlose Übergänge
sowohl zur allgemeinen oder OOP-Programmierung als auch zur
legalistischen C++-Sprachdefinition hat.

Es ist eine Sprachdefinition, in der man manchmal
Informationen schneller findet als in Büchern und in der
manchmal Dinge sogar einfacher erklärt sind als in Büchern.

Quote:
Ich denke, auch ausführliche Kurse in C++ sollten im
Allgemeinen nicht als Ziel haben, dass man die Norm
selbstständig lesen kann.

Die Norm bietet mir eine umfassende und halbwegs konsistente
(bewährte) Terminologie für C++ an. Ich habe nicht die Mittel,
um meine eigene Terminologie aufzustellen. Es ist für mich
daher am einfachsten und sichersten, die Normterminologie zu
übernehmen. Dies sichert auch am ehesten die terminologische
Verträglichkeit verschiedener Texte über C++ untereinander.

Quote:
Deine Zitate enthalten keine vollständigen Definitionen der Begriffe
'object' (C++) oder 'variable' (Java). Daher ist der Schluss, den du aus
der Gleichheit der teilweisen Definitionen ziehst, unzulässig.

Ich behaupte keine vollständige Identität, aber eine
näherungsweise Entsprechung ist offensichtlich.

Quote:
Nicht jede "typed storage location" in Java ist eine Variable.
Insbesondere ist ein anonymes Exemplar einer Klasse keine
'variable' in Java, während das C++-Equivalent durchaus ein
'object' - auch in deinem Sinne - ist.

Ohne nachzuschlagen, glaube ich, daß Du damit recht hast.

(Allerdings sind die Felder von Exemplaren einer Klasse in
Java auch wieder "variables", und, wenn man eine Referenz
auf ein Exemplar speichern will, so tut man dies in einer
"variable" - aber das ganze Exemplar selber ist keine
"variable".)

Quote:
Dies belegt, dass 'variable' eben nicht derselbe Begriff "in Java" (d.h.
in einem zu definierenden Java-bezogenn Sprachgebrauch) ist, wie
'object' (in dem von Dir propagierten C++-Norm-bezogenen Sinne).

Ja. Damit es genau derselbe Begriff sein kann, müßten beides
genau dieselben Sprachen sein.

Quote:
"Das ist simpel."

Dank deiner Erklärungen verstehe ich jetzt besser, was Stefan
meinte.
Back to top
Stefan Ram
Guest





PostPosted: Thu Aug 31, 2006 4:53 pm    Post subject: [KORREKTUR]Re: Einfuehrung in C(++) für Benutzer anderer Spr Reply with quote

Jörg Barfurth <usenet05 (AT) barfurth (DOT) de> writes:
Quote:
Dies ist allerdings keine vollständige Definition. Nicht jede
"region of storage" ist ein Objekt. Und, vornehm oder nicht, es
tatsächlich eine Eigenschaft die für Programmierer - zumal
Neulinge - ziemlich irrelevant ist.

Hierzu schrieb ich soeben in meinem anderen Posting:

»Dein erster Satz stimmt. Aber der zweite ist mir überhaupt
nicht nachvollziehbar. Anfänger benutzen Variablen, und
Variablen sind Namen für Objekte. Wie kann das für
Neulinge "irrelevant" sein?«

Mit »Dein erster Satz« meinte ich aber:

Quote:
Dies ist allerdings keine vollständige Definition. Nicht jede
"region of storage" ist ein Objekt.

Widersprechen wollte ich dann erst:

Quote:
Und, vornehm oder nicht, es tatsächlich eine Eigenschaft die
für Programmierer - zumal Neulinge - ziemlich irrelevant ist.
Back to top
kanze
Guest





PostPosted: Thu Aug 31, 2006 6:01 pm    Post subject: Re: Einführung in C(++) für Benutzer anderer Sprachen? Reply with quote

Ernst Sauer wrote:
Quote:
kanze wrote:
Ernst Sauer wrote:
kanze wrote:

Aber hast du richtig gutes C gelernt?

Profiprogrammier würden vermutlich sagen nein,
aber für mich ist das wichtigste, dass ich meinen
eigenen Mist nach Wochen und Monaten noch verstehe.
Deshalb schreibe ich die - durchaus großen - Programme
in einer möglichst einfachen Form.

Darüber gibt es nichts zu sagen. Auch Profis (die echten)
schreiben einfachen Code, den man gut warten können.

Quote:
Vermutlich ist das auch der Knackpunkt im Hinblick
auf die Beurteilung des Buches "C-Befehlsbibliothek".
Vielleicht behandelt Schildt nur die einfacheren Dinge,
bei denen man nicht viel falsch machen kann.

Ich denke nicht. Das Problem mit Schildt ist meistens, dass was
er schreibt falsch ist. Es funktionniert zwar mit einem
Compiler, heute, stosst aber an den Regeln der Sprache, oder
geht von Sachen aus, die gar nicht garantiert sind. Mit dem
Ergebnis, dass der Code nicht mit anderen Compilern bzw. nicht
mit anderen Versionen desselben Compilers funktionniert.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Back to top
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Goto page Previous  1, 2, 3, 4  Next
Page 3 of 4

 
 


Powered by phpBB © 2001, 2006 phpBB Group