Классы в Delphi

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by shadowrun, 5 Mar 2012.

?
  1. Да

    6 vote(s)
    42.9%
  2. Нет

    6 vote(s)
    42.9%
  3. Тс - быдлопрогер, пиз*уй на стройку

    2 vote(s)
    14.3%
  1. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Программирую около 2 лет. Не то, чтоб тру кодер, но кой че умею.
    Так вот за все время я не написал ни одного класса/объекта. Может кто объяснит мне, зачем их использовать? Или книженцию, где это более менее внятно описано. Со всего, что читал в книгах только примеры написания классов, а в каких ситуациях лучше применить, ни слова.
     
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Облегчает написание и поддержку однотипных программ. В твоем случае можешь создать класс superspamsoft и наследовать от него классы vkspamsoft, odspamsoft, дальше stenavkspamsoft, pmvkspamsoft и т.д. Поменял ВК авторизацию - переписываешь метод auth в vkspamsoft. Решил усовершенствовать рандомизацию сообщений - переписываешь msgrand в superspamsoft.

    p.s.: первый вариант в опросе лишний.
     
    2 people like this.
  3. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    скажу тебе так,классы писать приходилось,но их спокойно можно заменить функциями,не доводилась ситуация когда нужно было бы написать класс для каких то действий,заместо функции.ну и как верно отметил м_скрипт,для удобства скорее,для представления каких либо сложных структур.То есть когда пишешь функциями и вносишь изменения в код,то часто приходится затрагивать практически все,т.к. для получения какого либо результата ты собираешь функции\процедуры воедино,а так ты не будешь искать по всюду где произошли перемены,достаточно будет править что либо в классе.Допустим ты пишешь другую программу,содержащую элементы другой,согласись гораздо проще скопировать файл с классом и юзать его,вместо переписывания функции и ее отладки(хотя и тут есть решение для не любителей ООП- dll-ки) вот как то так.
     
    1 person likes this.
  4. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Тоесть, можно провести аналогию с пшп инклудами, когда у тебя например 5 страниц, и на каждой из них будет менюха. Ты пишешь скрипт менюхи отдельно и подключаешь его в нужном месте страницы, но если нужно что-то изменить в меню, нет необходимости переписывать все 5 страниц, а достаточно изменить только меню. Я правильно понял?
     
  5. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Да суть классов в том, что они могу быть унаследованные, т.е. создают своеобразную иерархию. Как дети получают часть ген своих родителей, так и классы, получают свойства своих предков и дополнительно имеют свои личные, которые передадутся их потомкам.

    Очень эффективно классы используются в игростроении. Все движки в основном так и оформлены. К примеру есть 100 НПЦ - разбойники. Они все люди и обладают одними и теми же свойствами - ломать кости при падении, умирать при повреждении области сердца, и так далее. Зачем описывать все 100 человек отдельно, когда можно создать один класс "Человек" и сделать 100 потомков, которые унаследуют все свойства человека. И только затем каждому отдельно уже подредактировать некие параметры, что один ломает ноги при падении с двух метров, а второй - со второго этажа.

    В принципе классы удобно использовать когда нужно создать большую структуру и при этом большое количество объектов, которые состоят из этих структур.
     
    #5 Sams, 5 Mar 2012
    Last edited: 5 Mar 2012
    1 person likes this.
  6. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Нет.
    Программные модули размещаются в отдельных файлах с расширением PAS. В них размещаются не только классы, но и любой другой код, чтобы:
    a) не переписывать каждый раз часто используемый код.
    b) сделать код программы более понятным - в одном файле работа с ФС, в другом с сетью и т.д.
     
    #6 M_script, 5 Mar 2012
    Last edited: 5 Mar 2012
  7. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    Есть одно неплохое задание, которым можно побаловаться на досуге. Попытаться построить мир, или конкретно какую-то область, в виде классов.
    К примеру возьмем что-то из самых низов:
    Создадим класс "элементарная частица" и присвоим ему свойства "заряд" и методы "создать", "разрушить".

    Создадим еще три класса "нейтрон", "протон", "электрон", укажем, что все они унаследуют свойства "элементарной частицы", и для каждого конкретно укажем их заряд, при этом классу "электрон" дополнительно присвоим свойство "направление движения".

    Создадим еще один класс "молекула", и укажем, что она состоит из "нейтрона", "протона", "электрона" и присвоим дополнительно свойства основ молекулярно кинетической теории - хаотичность и силы отталкивания и притяжения.

    Создадим еще класс, какой нибудь мельчайший объект. Присвоим ему свойство "кристаллическая решетка" и укажем, что он унаследует класс "молекула". Так же укажем еще несколько свойств "расположение молекул относительно друг друга", "количество молекул в кристаллической решетке" и так далее.

    В итоге таким образом выстраиваем своеобразную структуру. Далее уже можно создавать более большие объекты, которым уже присваивать свойства "размер", "цвет" и так далее и методы "разновидность деформаций", "перемещение в пространстве учитывая внешние факторы и силу тяжести", etc.

    Я описал лишь приблизительно. Штука довольно таки интересная :)
     
    #7 Sams, 5 Mar 2012
    Last edited: 5 Mar 2012
    1 person likes this.
  8. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    ООП - это очень удобно, особенно при построении больших проектов. Также думаю, что на работу врятли возьмут тебя, если ничего не знаешь об ООП.
     
  9. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Я не сталкивался в своей практике с большими проектами. Для своих нужд использовал процедуры и функции. Имею понятия о классе, его свойствах и методах, но хотелось бы подробно разобрать пару примеров использования. В каких случаях применяеться и тд...
     
  10. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Тебе правда лень открыть гугл и ввести запрос "ООП" или "принципы ООП"? Такого материала более чем достаточно. Потрудись найти его сам, чтобы не разводить бессмысленных дискуссий, тем более что здесь тоже не все знатоки великие.
     
  11. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    есть у тебя несколько переменных относящихся к чему то одному
    логично определить их в одной структуре и везде в программе
    иcпользовать имя этой структуры для ссылки на переменные
    тебе уже не надо помнить каждую переменную по отдельности
    достаточно запомнить имя структуры

    а вот представь есть у тебя какая нибудь сущность в программе
    которая должна предоставлять интерфейс для выполнения
    определенных операций естественно у этой сущности есть свое
    собственное состояние логично ее собственное состояние скрыть
    а предоставить только интерфейс в Си это делалось структурой
    и функциями принимающими первым параметром указатель на
    эту структуру своего рода this в С++ это делается через
    класс это самое примитивное использование ООП а дальше это
    наследование и полиморфизм любые функции которые делают
    что то что может быть изменено по прихоти пользователя
    делаеш виртуальными для максимальной гибкости соответственно
    клиент если его не устраивает стандартное поведение
    переопределяет одну из виртуальных функций и изменяет
    как ему надо поведение опять же аналогия в Си была
    бы функция перезаписывающая дефолтный обработчик
    на юзерский каллбек который тоже мог бы изменить
    поведение некоторой вещи
     
  12. vernite akk=

    vernite akk= New Member

    Joined:
    18 May 2011
    Messages:
    73
    Likes Received:
    2
    Reputations:
    0
    Постоянно использую классы, во первых инкапсуляция, тоесть снаачала у меня в коде потока была куча куйни, потом я привык писать процедуры функц для упрощения больших кусков, и всеравно для взаимодействия их иногда нужны были глобальные переменные в больших кол-вах, теперь у меня код потока выглядит так.

    procedure Execute;
    var
    Twit : TTwitCheck;
    begin
    Twit.Pas := '';
    Twit.Login := '';
    if (Twit.Err) then
    begin

    end
    else
    begin
    if (Twit.Valid) then
    begin

    end;
    end;
    Twit.Free;
    end;

    Тоесть я могу человеку передать модуль с классом и ему нечего не надо будет знать как там внутри что устроено, этоже можно зделать с помощью процедур но это будет .....

    Наследование, вместо того чтобы писать свой класс для работы с сетью или набор процедур, я унаследовался от thttpsend класс дляя работы с сетью в синапсе, в нем поправил нужные весчи добавил поддержку нужных вещей.

    Код с использованием ООП легче читаеться, с ним приятней удобней работать, он сводит к минимуму написание одного и тогоже 200 раз.

    Конечноже все зависит от програмиста...
    Но с ООП (когда я начал его изучать) мне стало легче кодить большие обьемы кода.
    Сейчас у меня все программы пишуться с использованием ООП.