Problem mit Objektorientierung

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Problem mit Objektorientierung

Beitrag von 400kmh »

Beim der Ausführung folgender Anwendung erscheint folgende Fehlermeldung: Exception-Klasse >>External: SIGSEGV<< ausgelöst.

Dann springt der Editor in die folgende Zeile: "self.x:=1; end;"

Wenn man mit der Maus über "self" verweilt, wird folgendes eingeblendet: "self = = Cannot access memory at address 0x0"

Code: Alles auswählen

unit unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs; 
 
type
 
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject); end;
 
  TObjekt = class
    x: integer;
    Procedure Berechnung; end;
 
var
  Form1: TForm1; 
  Objekt1: TObjekt;
 
implementation
 
{$R *.lfm}
 
procedure TObjekt.Berechnung; begin
  self.x:=1; end;
 
procedure TForm1.FormCreate(Sender: TObject); begin
  Objekt1.Berechnung;
  Form1.Caption:=inttostr(Objekt1.x); end;
 
end. 
 
Wie kann man das Problem beheben?

(Programm beginnt mit der Prozedur TForm1.FormCreate)

Benutzeravatar
theo
Beiträge: 11000
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem mit Objektorientierung

Beitrag von theo »

Du musst das Objekt zuerst createn, bevor du es benutzt.
Guckst du: http://www.delphi-treff.de/tutorials/ob ... ammierung/

Und bitte mach die Formatierung normal, nicht begin auf der gleichen Zeile wie procedure etc.. Das sieht echt übel aus.

So:

Code: Alles auswählen

procedure TObjekt.Berechnung; 
begin
  x:=1; 
end;
Und: Nein, das ist nicht Geschmackssache. ;-)

400kmh
Beiträge: 100
Registriert: Do 25. Mär 2010, 04:03

Re: Problem mit Objektorientierung

Beitrag von 400kmh »

m.fuchs hat geschrieben: Aber mit deiner seltsamen Nutzung von end, kann man sich nun wirklich nicht zurecht finden. Kein Mensch kann erkennen, wozu ein end gehört. Nimm es mir nicht böse, aber kommst du ursprünglich von einer C-artigen Sprache?
Nein, ich komme von Pascal.

Bei C finde ich es allerdings in der Tat noch angebrachter die Klammern "{" und "}" nicht in eigene Zeilen zu schreiben, weil das einfach pothässlich aussieht.
Patito hat geschrieben: 1) begin und end sind wichtig. Ist ihre Position irgendwo verstreut, ist es wesentlich schwerer Fehler
an ihrer Position zu erkennen. Es geht ja nicht nur darum dem Leser die Idee des Codes darzubringen,
sondern der Leser muss auch in der Lage sein "Code = Absicht" einfach zu prüfen. Wenn man es
trotzdem durchziehen will, wäre es zumindest Pflicht die Positionen der begin und ends vollautomatisch
mit den Einrückungen abzugleichen.
Wenn man in Lazarus auf ein "begin" bzw. "end" klickt wird automatisch das dazugehörige "end" bzw. "begin" rot eingekreist. Deshalb habe ich keinerlei Probleme damit herauszufinden, wozu ein "end" gehört.

Bei Editoren, die das nicht machen, gebe ich Dir allerdings recht: Da sollte das "end" wohl in eine eigene Zeile.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Problem mit Objektorientierung

Beitrag von mse »

theo hat geschrieben: "mittlerweile gewöhnt" sagt ja alles. Das heißt auf deutsch, das er auch große Mühe damit hatte.
Was ja nicht heisst, dass es schlecht ist. Geige spielen ist nicht schlecht, obwohl man am Anfang grosse Mühe damit hat. ;-)
Und wie gesagt, ich habe längere Zeit auch andere Codierungs-Stile verwendet.

Martin

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Problem mit Objektorientierung

Beitrag von Patito »

Ich habe mal ein Bild angefügt, was ich mir von der IDE bei den begin und ends so wünsche.

Als Wetteinsatz gäbe es z.B. einen Formatter oder Viewer für den Python-Style zu schreiben,
der alle Zeilen passend einrückt und alle begin, ends und ";" aus dem Sichtfeld schiebt (z.B. 200 Zeichen nach rechts draußen).
MitjaStachowiak hat geschrieben:Also lesen kann man das mit den gleichen Einrückungen natürlich schon schneller

Das werte ich jetzt eventuell als Sieg :-)

(P.S.: Sauerei! Ich darf hier keinen Screenshot hochladen, der 1920 Pixel hoch ist..)
Dateianhänge
RBTreeInsert.jpg

Benutzeravatar
theo
Beiträge: 11000
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem mit Objektorientierung

Beitrag von theo »

mse hat geschrieben: Was ja nicht heisst, dass es schlecht ist. Geige spielen ist nicht schlecht, obwohl man am Anfang grosse Mühe damit hat. ;-)
Doch, im Ggs. zur Geige kostet es Zeit ohne erkennbaren Nutzen (jedenfalls erkennt den ausser dir keiner) :wink:

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Problem mit Objektorientierung

Beitrag von mse »

Na, meine Produktivität ist mit meinem Stil am grössten, das ist eigentlich alles was mich interessiert.
Und deine Produktivität würde vielleicht auch steigen, wenn du die Anfangshürden meistern würdest, wer weiss. ;-)

Benutzeravatar
theo
Beiträge: 11000
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem mit Objektorientierung

Beitrag von theo »

mse hat geschrieben: Und deine Produktivität würde vielleicht auch steigen, wenn du die Anfangshürden meistern würdest, wer weiss. ;-)
Die konsequente Kleinschrift ist mit einiger Sicherheit für die meisten Menschen schlechter lesbar.
Mein Auge flutscht da nur so drüber. Das kann nicht gut sein.

setstatfilevar

Da muss man ja erst nachdenken, wie man das überhaupt lesen soll.
Nein danke! :wink:

Antworten