Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2013, 00:18   #11
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Возможна. Классификация, это всего лишь выделение объекта в определенную группу. Классификация не относится к внутреннему механизму.
Например. integer паскаля и int для .NET входят в одно и то же семейство - целые числа. Но в паскале это атомарная единица а в дотнете это объект.
Если бы С++ не поддерживал бы инкапсуляцию и сокрытие данных, то классификация была бы невозможна.
8Observer8 вне форума Ответить с цитированием
Старый 06.02.2013, 00:20   #12
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
А что не так? Вполне логично. Классификация невозможна без механизма создания модели объекта (без инкапсуляции). В модели объекта соединяются свойства и поведение. А так же классификация невозможна без сокрытия данных.
Код:
struct Simple
{
   void Work(){ ... }
    Connector getData;
};
По мнению ООП, если я не закрыл механизм от внешней стороны, то он уже и не механизм никакой? И на модель не катит?

Инкапсуляция - это механизм контроля за сложностью модели. Он избавляет от необходимости держать все детали модели в голове одновременно. И при этом позволяет над одной моделью работать множеству люде.

"Классификация" - это способ самые различные объекты разделять на группы, по некоторым общим признакам.

Практически на всех ООП языках, классификация осуществляется при помощи ключевого слова class, за которым следует описание свойств и умений объектов, которые будут пренадлежать данному классу.

На языке с++ классифицировать объект можно так же ключевым словом struct. Однако, по правилу хорошего тона, структура описывает лишь строение объектов, а не их умения.
_Bers вне форума Ответить с цитированием
Старый 06.02.2013, 00:22   #13
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Если бы С++ не поддерживал бы инкапсуляцию и сокрытие данных, то классификация была бы невозможна.
Ну почему же. Возьмем чистый С. Можно классифицировать типы данных на целые (int, char, long int) и числа с плавающей точкой (float, double, long double) и составные (struct и, не помню было-ли в С, union).

Что касается ООП. Что есть объект? Это некое формальное представление явления или объекта еще чего-то. Оно имеет какие-то характеристики (грубо говоря - набор внутренних переменных) и поведение (грубо говоря - функции).
Мы можем их классифицированатьпо поведению и по характеристикам, причем не имеет никакого значения знаем-ли мы их все или они от нас скрыты.

Что бы отличить кошку и попугая (и соответственно отнести кошку к млекопитающим, а попугая к птицам) нам нам нет нужды скрывать их внутреннюю структуру (хотя она не обязательна, в данном случае). В основе классификации лежат сходства и/или различия в поведении и характеристиках, а не степень их закрытости и инкапсулированности.

А теперь скажите, как вы будете классифицировать двух абстрактных животных, если от вас сокрыты все их свойства и поведения. По какому критерию вы их классифицировать будете?
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 06.02.2013 в 00:35.
ROD вне форума Ответить с цитированием
Старый 06.02.2013, 00:34   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Если бы С++ не поддерживал бы инкапсуляцию и сокрытие данных, то классификация была бы невозможна.
Ладно. К черту плюсы - возьмем чистый Керниговский Си. Каковы в нем приметы классов? Я подскажу - хедеры, библиотеки, структуры... Дальше продолжи
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.02.2013, 07:48   #15
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Классификация - обеспечивается инкапсуляцией и сокрытием данных.
Просто поражает, как классификация, может способствовать "сокрытию данных".
Молодой человек, сначала выучите предмет, а потом лезте со своими идеями к профессионалам. Извините за грубость, но Вы - дилетант.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 06.02.2013, 09:29   #16
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Просто поражает, как классификация, может способствовать "сокрытию данных".
Молодой человек, сначала выучите предмет, а потом лезте со своими идеями к профессионалам. Извините за грубость, но Вы - дилетант.
Наоборот. Сокрытие данных и инкапсуляция способствует классификации.
8Observer8 вне форума Ответить с цитированием
Старый 06.02.2013, 09:47   #17
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
А теперь контрольный вопрос.
Есть геометрические фигуры. Есть прямоугольники. Есть квадраты. Есть круги.
Если моделировать всё перечисленное классами, то какие классы должны быть наследниками каких (и каким должно быть наследование)? Какие классы должны быть абстрактными?
У меня такая идея. Сделать абстрактным класс 'Многоугольник'. А дальше наследовать: 'Многоугольник' -> 'Четырёхугольник' -> 'Параллелограмм' -> 'Ромб' -> 'Прямоугольник' -> 'Квадрат'.

Круг - это тоже многоугольник, со своими свойствами.

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Про связь общей концепции полиморфизма с конкретно C++-ной синтаксической фишкой перегрузки операторов я лучше промолчу.
Полиморфизм - это способность разных объектов реагировать на одинаковые действия.

Создадим разные объекты разных классов: класс 'Матрица', класс 'Комплексные числа'. Для каждого из этих классов переопределим оператор '+'.

Теперь мы можем создать полиморфные объекты (которые будут по-разному реагировать на сложение, поэтому и будут полиморфными):

Код:
    Matrix A, B, C;

    ... // заполняем матрицы A и B

    C = A + B;
Код:
    Complex a, b, c;

    ... // инициализируем комплексные числа a и b

    c = a + b;

Последний раз редактировалось 8Observer8; 06.02.2013 в 11:25. Причина: Исправил по замечанию Abstraction #19
8Observer8 вне форума Ответить с цитированием
Старый 06.02.2013, 10:24   #18
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

to _Bers

На модель катит. Но без сокрытия данных не будет правильной классификации.

to ROD
to Stilet

Это неправильная классификация. Так как в жизни я не могу поменять что-то в кошке, чтобы она стала обладать свойствами собаки (то есть стала собакай). Есть свойства, которые отличают собак от кошек. Одно дело, когда мы договариваемся не трогать эти свойства. А другое, когда нам это непозволено (в этом случае будет правильная классификация). Так как концепция ООП об неизменении отличительных свойств (по которым мы классифицировали) будет выполнена и обеспечена средствами языка.

Последний раз редактировалось 8Observer8; 06.02.2013 в 10:40.
8Observer8 вне форума Ответить с цитированием
Старый 06.02.2013, 10:44   #19
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Полиморфизм - это способность разных объектов реагировать на одинаковые действия.

Создадим разные объекты разных классов: класс 'Матрица', класс 'Комплексные числа'. Для каждого из этих классов переопределим оператор '+'.
Почему не метод Sum()? То есть, откуда взялось обособление частного случая операторов?
Цитата:
У меня такая идея. Сделать абстрактным класс 'Многоугольник'. А дальше наследовать: 'Многоугольник' -> 'Четырёхугольник' -> 'Параллелепипед' -> 'Прямоугольник' -> 'Ромб' -> 'Квадрат'.
Класс "ромб" наследует классу "прямоугольник"? Вы хорошо подумали?
Abstraction вне форума Ответить с цитированием
Старый 06.02.2013, 10:59   #20
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

Цитата:
Но без сокрытия данных не будет правильной классификации.
Почему же??

По-моему открытость методов какого-либо объекта мало связано с классификацией. То же понятие "точка" для геометрических фигур:

Код:
struct point {
  int x;
  int y;
};
Вроде как выделенное регламентированное понятие, классифицированное как "точка". Если наша задача работает только с целыми координатами, инкапсуляция тут не нужна, т.к. какого-то сложного поведения объект не имеет (для какой-то данной конкретной задачи) и, возможно, будет даже мешать.

------
Код:
Так как в жизни я не могу поменять что-то в кошке, чтобы она стала обладать свойствами собаки (то есть стала собакай).
Читаем "Остров доктора Моро" или "Собачье сердце" :D
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инструкция по созданию заготовки для 2D игр (для начинающих) 8Observer8 Gamedev - cоздание игр: Unity, OpenGL, DirectX 31 20.03.2023 02:01
C++ для начинающих a_Alise Помощь студентам 2 27.03.2016 10:00
C++ для начинающих Haruko_ Помощь студентам 0 23.10.2012 21:41
С++ для начинающих Maxim1 Общие вопросы C/C++ 10 31.05.2010 00:22