Абстрактные методы,все понятно(нет)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Аватара пользователя
vvvch
постоялец
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Сообщение vvvch »

pupsik
Понимаете, Вы ему хототите показать фрагментами, как это делается. А у человека нет общего понимания. Вот и надо ему прочесть что-то попроще и побыстрей. А то я предложил фундаментальную литературу. Может Вы знаете что порекомендовать?
Хотя пример, что Вы привели - хорош. Если он разбираться - хорошо, нет надо учебник.
Последний раз редактировалось vvvch 24.06.2016 22:29:34, всего редактировалось 1 раз.
Bombucho
новенький
Сообщения: 37
Зарегистрирован: 18.06.2016 21:02:38

Сообщение Bombucho »

pupsik писал(а):Пойдём иным путём, без учебников: http://www.delphibasics.ru/Abstract.php

Добавлено спустя 4 минуты 48 секунд:
И избавляйте себя от плохой привычки:

Код: Выделить всё

result:='.......'+'со стороной'+n+'см'+'имеет площадь:'+floatTostr((Square())+'см'+' '
      +'и периметр:'+floatTostr((Perimetr())+'см.'+'
. Зачем это в классе?


Ну чтобы проще вывести информацию в Label или showmessage (ну так "учат" нас :roll: )
Аватара пользователя
vvvch
постоялец
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Сообщение vvvch »

А где передаёщь в класс информацию и о длине сторон? Иначе зачем тебе свойство?
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

Bombucho ссылка что то прояснила?
А где передаёщь в класс информацию и о длине сторон? Иначе зачем тебе свойство?
не пугайте человека странными словами. Не всё сразу :wink:
Bombucho
новенький
Сообщения: 37
Зарегистрирован: 18.06.2016 21:02:38

Сообщение Bombucho »

Bombucho писал(а):Пойдём иным путём, без учебников: http://www.delphibasics.ru/Abstract.php


В задании указывается, что методы должны быть абстрактными в примере по ссылке это условие выполняет эта строчка " procedure setArea; Virtual; Abstract; "
Аватара пользователя
vvvch
постоялец
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Сообщение vvvch »

pupsik
О свойстве, там в условии, сказано.

Добавлено спустя 4 минуты 48 секунд:
Bombucho
В примере, приведённом тебе, не относись к нему как к догме, у тебя может быть по другому, просто тебе надо понять как это делается. И что ты хотел спросить?

Добавлено спустя 2 минуты 8 секунд:
Мы хотим выяснить, понимаешь ли ты пример? Или тебе нужно общая информация о ООП?
Bombucho
новенький
Сообщения: 37
Зарегистрирован: 18.06.2016 21:02:38

Сообщение Bombucho »

vvvch писал(а):И что ты хотел спросить?


Я просто хотел спросить правильно ли я размышляю, и выполняю ли условия поставленного задания(если вы об этом)
Аватара пользователя
vvvch
постоялец
Сообщения: 105
Зарегистрирован: 26.04.2013 11:05:39
Откуда: г.Боровичи, Новг. обл.

Сообщение vvvch »

Bombucho
Да, правильно, обрати внимание как это сделано в классе предка и как он переписывался в наследниках. И ещё, сразу привыкай думать о классе, как о чёрном ящике, у которого снаружи видны только методы public и если в этом же модуле - protected(из др. модулей они не видны), другие используется внутри самого класса. Для визуального класса есть ещё published но тебе это пока не надо. Да, то что описывается сразу после имени класса, те-же published, хоть это и не указывается.
И ещё, в книгах написано одна видимость, в реальности немного иная, проще всего это поверить компилятором, после имени класса и точки нажимаем Ctrl-пробел, и он "вываливает" список методов что можно увидеть и использовать.
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

Код: Выделить всё

unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;

type

  { TFigura }

  TFigura = class(TObject)
      procedure get_name; Virtual; Abstract;
      procedure get_perimetr; Virtual; Abstract;
      procedure get_area; Virtual; Abstract;
  end;

  { TKub }

  TKub = class(TFigura)
      fname : string;
      fdlina : integer;
    protected
      procedure get_name; override;
      procedure get_perimetr; override;
      procedure get_area; override;
    public
      constructor Create;
      property name : string read fname;
      property dlina : integer read fdlina write fdlina;
  end;

implementation

{ TKub }

procedure TKub.get_name;
begin
  fname := ClassName;
end;

procedure TKub.get_perimetr;
begin
  //
end;

procedure TKub.get_area;
begin
//
end;

constructor TKub.Create;
begin
  get_name;
end;

end.

Если не ошибаюсь: у вас будет нечто подобное. Имя вам не было необходимости выводить. Остальную арифметику сами "добросаете". Ну..у и, возможно, ошибся я. :lol:
Аватара пользователя
AlphaBlend
постоялец
Сообщения: 207
Зарегистрирован: 22.05.2016 09:13:10

Сообщение AlphaBlend »

Bombucho Глядишь , Вы на форуме получите высшее образование :wink:
Ответить