| klem4 |
12.10.2006 14:46
Сообщение
#1
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Почему я не могу напрямую вызвать метод класса ? ClassName.MethodName ? Просто интересно.
{$N+}
uses Crt, Polinom; -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
| volvo |
15.10.2006 23:42
Сообщение
#2
|
|
Гость |
Цитата можно использовать метод класса, который проверит есть ли экземпляры с такими свойствами... То, что выделено красным - несовместимо... Понимаешь, в чем дело... В Class Method-е ты не можешь обращаться к данным класса/НЕ-классовым методам/свойствам... По одной простой причине: в момент, когда ты вызываешь Class Method у тебя может не быть ни одного экземпляра класса. То есть, проверить что-либо, касаемое экземпляров именно этого класса у тебя не выйдет. Вот еще один классический пример использования: НДС (ну, или любой другой налог), взимаемый за, скажем, услугу, описываемую типом T, изначально равен 17%... В какой-то момент этот налог увеличивается. При инициализации нового экземпляра класса мы должны увидеть новое значение налога, и при обработке информации, связанной с T (!!!), тоже будет рассматриваться новое значение. Что делаем? {$mode ObjFPC}
Используем так: uses unit_1; Я знаю, что ты скажешь: "А почему бы не просто функция (вообще вне класса), которая будет изменять переменную? Или вообще напрямую изменять переменную, безо всяких функций... Зачем навороты?" Так? Не так... То, что напрямую - это нарушается принцип упрятывания информации, значит придется работать-таки через какой-то интерфейс. Простая функция? Да ни в коем случае... Я же сказал, что VAT - это налог за услугу T, а если будет 2 услуги? T и R, например? Налог на T один, на R - другой... Почему не просто метод в классе T? Потому, что у меня может не быть ни одного экземпляра инициализировано, а придется менять VAT. Создавать временный экземпляр, а потом удалять его - глупо. Поэтому делаем Class Procedure, и программа становится прозрачной... Даже если у меня уже и есть инициализированные экземпляры класса T, я предпочту сделать НЕ так: obj_1.set_VAT(0.19);, а вот так: T.set_VAT(0.19);, потому, что налог распространяется НЕ на один какой-то экземпляр услуги, а на весь ее тип !!! Понимаешь, в чем вся идея? Ты пользуешься Class Method-ами тогда, когда тебе нужно сделать что-то, что характерно НЕ для экземпляра, а в целом для класса... |
klem4 Fpc, методы класса 12.10.2006 14:46
volvo А что, собственно, тебя смущает? Ты данные какого ... 12.10.2006 15:09
klem4 Нет, я хочу вызвать именно метод класса, а не его ... 12.10.2006 15:16
klem4 Вот такое в FPC наверняка ведь можно сделать ?
us... 12.10.2006 15:45
volvo Ты про это:
TPolinom = class
public
cons... 12.10.2006 15:55
klem4 Ага :yes2: а что это значит ?))) 12.10.2006 15:57
volvo 6.3.3 Class methods
Class methods are methods that... 12.10.2006 16:05
klem4 Все время забываю про этот мануал :)
Класс :)
С... 12.10.2006 16:13
Altair А в чем смысл вызова метода класса ? Ведь класс яв... 15.10.2006 13:47
klem4 Вот ты не прав. Зачем - то же умные люди дали нам ... 15.10.2006 15:55
volvo Олег, тривиальная задача: посчитать, сколько экзем... 15.10.2006 16:09
Altair
Вообще-то индивидульность объекта - одно из фунд... 15.10.2006 22:03
klem4 А можно на fpc написать именно аналог кода приведе... 30.01.2007 15:00
volvo Именно поэтому приходится работать не с полями кла... 30.01.2007 16:18
volvo Хотя, естественно, обмануть компилятор можно:
{... 30.01.2007 17:01
klem4 Здорово :) :good: 30.01.2007 17:52![]() ![]() |
|
Текстовая версия | 10.12.2025 23:19 |