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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простейшие стереотипы классов? 
:(
    Опции темы
unicuum
  Дата 2.12.2009, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



В C++ написано, что класс отличается от структуры только модификатором доступа по умолчанию, но дело в другом. Мы можем использовать структуру как класс, хотя многие программисты так не делают. Конечно, это обуславливается наследием Си и совместимостью. Однако при переходе на С++ люди всё равно хранят свои поля в структуре открыто. Для построения классов же применяются различные шаблоны проектирования.

Для примера код:
Код

#include <iostream>

using namespace std;

// Внутри класса только свойства
class Structure
{
private:
    int _property;
public:
    Structure(){ _property = 0; }
    const int& getProperty() const { return _property; }
    void setProperty(const int& value){ _property = value; }
};

// Внутри класса только методы
class Module
{
public:
    int move(int position) const { return ++position; }
    int run(int position) const { return position += 5;  }
};

int main()
{
    // испытваем структуру
    Structure objStruct;
    cout << "property = " << objStruct.getProperty() << endl;
    objStruct.setProperty(17);
    cout << "property = " << objStruct.getProperty() << endl;
    // испытываем модуль
    Module objModule;
    cout << "position = " << objModule.move(0) << endl;
    cout << "position = " << objModule.run(0) << endl;
    return 0;
}

Те же свойства можно определить иначе, через шаблоны или ещё как, но понимать под этим будем то же самое. Вопрос, как назвать стереотип классов в которых находятся только свойства (как полей структуры, только с проверкой) и в другом случае только методы, то есть простые случаи использования.


--------------------
user posted image
обычный день на винграде
PM   Вверх
GremlinProg
Дата 2.12.2009, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Цитата(unicuum @  2.12.2009,  09:00 Найти цитируемый пост)
и в другом случае только методы

спорно, очень спорно, т.к. бесполезен класс, кторый владеет только методами, а данные этим методам передаются в параметрах,
для такого есть более логичная семантика: namespace

Добавлено @ 07:11
равнозначная замена:
Код

// Внутри класса только методы
class Module
{
protected:
  int position;
public:
    Module( int position ):position( position ){}
    operator int( void )const{ return position; }
    Module&move( void ){ return ++position, *this; }
    Module&run( void ){ return position += 5, *this;  }
};
...
// испытываем модуль
    Module objModule = 0;
    cout << "position = " << objModule.move() << endl;
    cout << "position = " << objModule.run() << endl;


Добавлено @ 07:18
ну или непосредственно:
Код

namespace Module
{
    int move(int position) { return ++position; }
    int run(int position) { return position += 5;  }
};

это будет точная копия, только оптимальнее,
хотя бы с точки зрения производительности: не нужно таскать с каждым вызовом this

Это сообщение отредактировал(а) GremlinProg - 2.12.2009, 07:40


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
unicuum
Дата 2.12.2009, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



Цитата(GremlinProg @  2.12.2009,  07:06 Найти цитируемый пост)
равнозначная замена:

Вначале тоже написал с полем position, но потом убрал. Интересно именно название такого стереотипа, реализация не важна, пусть даже там будут заключены шаблоны функций. Нахождение внутри класса дополнительных данных просто говорит о том, что стереотип называется по другому. Между прочим ему тоже можно дать название, хотя я для начала хотел взять что попроще. Более сложных шаблонов проектирования, таких как Команда, вообще не касаюсь, не про них этот топик.


--------------------
user posted image
обычный день на винграде
PM   Вверх
GremlinProg
Дата 2.12.2009, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



да нет такого стереотипа,

смотри сам: http://ru.wikipedia.org/wiki/Класс_(программирование)
класс - сущность, задающая  поведение объекта,
а поля - как раз и формируют объект

когда нет полей - объекта - нет, соответственно, и класса над ним,
т.е. класса только с методами не существует, это просто пространство имен: namespace


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
unicuum
  Дата 2.12.2009, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



Цитата(GremlinProg @  2.12.2009,  07:38 Найти цитируемый пост)
смотри сам: http://ru.wikipedia.org/wiki/Класс_(программирование)
класс - сущность, задающая  поведение объекта,
а поля - как раз и формируют объект

Поля определяют данные объекта, а класс это шаблон по которому строится объект. Впрочем речь совершенно о другом.

Цитата(GremlinProg @  2.12.2009,  07:38 Найти цитируемый пост)
когда нет полей - объекта - нет, соответственно, и класса над ним,
т.е. класса только с методами не существует, это просто пространство имен: namespace 

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


--------------------
user posted image
обычный день на винграде
PM   Вверх
GremlinProg
Дата 2.12.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



Цитата(unicuum @  2.12.2009,  10:31 Найти цитируемый пост)
Лично я в С++ считаю классами даже реализацию на них шаблона проектирования интерфейса с чисто абстрактными методами. В общем, классы это типы определяемые пользователем программистом, а уж что он там определил дело десятое.

абстрактные и полиморфные классы заведомо "непустые", не надо путать,
а вот привязываться к конкретной возможности создавать именно пустые классы не стоит (кстати, даже такой класс будет владеть объектом размером в 1 байт)

есть Си-парадигма - общее представление,
есть Си-стандарт - конкретная реализация этой парадигмы, в какм-то завершенном/незавершенном виде
я уже не говорю о реализации этого стандарта - конкретном компиляторе

стереотип, или то понятие, которое ты подразумеваешь в теме,
относится скорее к парадигме, как и паттерны и пр., и точно не относится к реализации стандарта, т.е. компилятору,

т.е. не должны эти вещи зависеть ни от реализации, ни от какой-то модификации стандарта

пусть, к примеру через пару лет, возможность создавать такие классы у нас не отберут,
либо будут автоматически выводить такой "неоптимальный" код из ООП,
т.е. превратят методы в функции, ты по прежнему будешь считать, что работаешь с классом?


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Lazin
Дата 2.12.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



unicuum, скажу тебе как человек, страдающий ООП головного мозга, ты архитектурный астронавт
не в обиду было сказано smile 
то о чем ты спрашиваешь, не имеет названия, есть такое понятие как геттер/сеттер - метод возвращающий/изменяющий значение поля, которые используются так-как в языке нет такого понятия как свойство, а есть более общее понятие - метод класса, вот собственно и все; вряд-ли кто-то занимается классификацией подобных вещей.
PM MAIL Skype GTalk   Вверх
unicuum
  Дата 2.12.2009, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



Цитата(GremlinProg @  2.12.2009,  08:59 Найти цитируемый пост)
стереотип, или то понятие, которое ты подразумеваешь в теме,
относится скорее к парадигме, как и паттерны и пр., и точно не относится к реализации стандарта, т.е. компилятору,

Именно это я и подразумеваю. Вот представь, что тебе в C++ захочется скомбинировать функции в пространстве имён. А в другой раз сделать их статическими в классе. Если знать для чего это делаешь, то при разных реализациях смысл один и тот же. Но ведь у понятия должно быть хоть какое-то название.
Цитата(Lazin @  2.12.2009,  09:05 Найти цитируемый пост)
то о чем ты спрашиваешь, не имеет названия, есть такое понятие как геттер/сеттер - метод возвращающий/изменяющий значение поля, которые используются так-как в языке нет такого понятия как свойство, а есть более общее понятие - метод класса, вот собственно и все; вряд-ли кто-то занимается классификацией подобных вещей. 

Так я и не говорю, что его нет. Вот в C# есть, но при декомпиляции видно, что реализация абсолютно такая же. Свойство это фундаментальный шаблон проектирования программы - Property Container: Посредник между полями и методами класса.
Цитата(Lazin @  2.12.2009,  09:05 Найти цитируемый пост)
unicuum, скажу тебе как человек, страдающий ООП головного мозга, ты архитектурный астронавт
не в обиду было сказано user posted image 

Это и не обижает, тем более, что правда в какой-то мере. Сначала меня образно говоря заставили выучить синтаксис языка. Потом принять правила игры библиотек на этом самом языке. Далее нашпиговали различными шаблонами проектирования. Моя же цель прийти к некому соглашению, по которому я просто смогу мыслить одобренными мною понятиями и при этом как бы сказать, не отбиваться совсем уж от коллектива, то есть общих понятий программирования.

Это сообщение отредактировал(а) unicuum - 2.12.2009, 09:44


--------------------
user posted image
обычный день на винграде
PM   Вверх
mes
Дата 2.12.2009, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(unicuum @  2.12.2009,  06:32 Найти цитируемый пост)
Интересно именно название такого стереотипа, реализация не важна, пусть даже там будут заключены шаблоны функций. Нахождение внутри класса дополнительных данных просто говорит о том, что стереотип называется по другому. 

Данные бывают разные статические и нестатические дата-члены. Вас так понял интересует последние.

Говоря Вашим языком:  если есть возможность создать объект, значит у класса есть данные, даже если они реально не описаны в нем.
Именно на эти данные будет указывать this.



Это сообщение отредактировал(а) mes - 2.12.2009, 10:26


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1159 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.