Другие языки программирования и технологии
Зачем нужны классы, если можно вот так: (*obj.getSomething)(&obj) ?
чтобы их можно было наследовать
Игорь Сергиевич
Агрегирование.
Чтобы быстро находить нужное место в крупном проекте.
Объектно-ориентированное программирование - это популярная нынче парадигма программирования. Смысл данной парадигмы заключается в том, чтобы описать программу как совокупность объектов. Классы - это способ описать объект.
Вообще есть 4 основных возможности классов.
Инкапсуляция - это сокрытие деталей класса. Предположим вы делаете класс мобильника. Вы же не будете давать пользователю доступ к процессору антенне. Вы дадите пользователю возможно лишь нажимать на экран, пару кнопочек и пару портов (для зарядки и для наушников). Также и в программировании. Когда кто-то будет работать с объектами вашего класса он может не представлять какие внутри переменные, он сможет работать лишь с теми переменными, с которыми вы разрешите ему работать. То есть вы можете насоздавать переменных, необходимых для работы объекта и пользователь вашего класса до них добраться не сможет.
Абстрагирование. Если мы представляем мобильный, то мы представляем его как что-то целостное, а не как набор микросхем, которые друг с другом взаимодействуют. Также и ООП позволяет работать не с кучей переменных а с целостной сущностью.
Наследование. Это фича сильно упрощает программирование. Представьте себе, что вы делаете графический редактор и хотите рисовать фигуры. Они все имеют что-то общее, скажем цвет фигуры и их удалять можно. Вы можете это реализовать в классе фигура, а затем делать разные фигуры и использовать то, что описали в классе фигура.
Полиформизм. свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. То есть вы можете насоздавать классы телефона и делать метод звонить. Вам неважно на каком телефоне вы будете звонить, набирать номер выбрав контакта в андроиде, набрав кнопками номер или вообще через барышню связаться с абонентом, можно просто позвонить.
КнопочныйТелефон. позвонить ()
Мобильник. позвонить ()
СтарыйТелефонСБарышнями. позвонить ()
Согласитесь, что это проще чем
ПозвонитьСМобильника (*мобильник)
ПозвонитьСоСтарогоТелефона (*СтарыйТелефон)
Также хочу добавить, что с точки зрения С++ структуры это частные случаи классов, только без методов. Без них вам бы пришлось объединять переменные.
Что удобнее
Вот такой код.
НарисоватьФигуру (*Фигура);
ПереместитьФигуру (*Фигура, координаты)
УвеличитьФигуру (*Фигура, коэффициент);
УдалитьФигуру (*Фигура);
Или же вот
Фигура фиг ();
фиг. переместить (координаты);
фиг. увеличить (коэффициент);
~фиг ();
Вообще есть 4 основных возможности классов.
Инкапсуляция - это сокрытие деталей класса. Предположим вы делаете класс мобильника. Вы же не будете давать пользователю доступ к процессору антенне. Вы дадите пользователю возможно лишь нажимать на экран, пару кнопочек и пару портов (для зарядки и для наушников). Также и в программировании. Когда кто-то будет работать с объектами вашего класса он может не представлять какие внутри переменные, он сможет работать лишь с теми переменными, с которыми вы разрешите ему работать. То есть вы можете насоздавать переменных, необходимых для работы объекта и пользователь вашего класса до них добраться не сможет.
Абстрагирование. Если мы представляем мобильный, то мы представляем его как что-то целостное, а не как набор микросхем, которые друг с другом взаимодействуют. Также и ООП позволяет работать не с кучей переменных а с целостной сущностью.
Наследование. Это фича сильно упрощает программирование. Представьте себе, что вы делаете графический редактор и хотите рисовать фигуры. Они все имеют что-то общее, скажем цвет фигуры и их удалять можно. Вы можете это реализовать в классе фигура, а затем делать разные фигуры и использовать то, что описали в классе фигура.
Полиформизм. свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. То есть вы можете насоздавать классы телефона и делать метод звонить. Вам неважно на каком телефоне вы будете звонить, набирать номер выбрав контакта в андроиде, набрав кнопками номер или вообще через барышню связаться с абонентом, можно просто позвонить.
КнопочныйТелефон. позвонить ()
Мобильник. позвонить ()
СтарыйТелефонСБарышнями. позвонить ()
Согласитесь, что это проще чем
ПозвонитьСМобильника (*мобильник)
ПозвонитьСоСтарогоТелефона (*СтарыйТелефон)
Также хочу добавить, что с точки зрения С++ структуры это частные случаи классов, только без методов. Без них вам бы пришлось объединять переменные.
Что удобнее
Вот такой код.
НарисоватьФигуру (*Фигура);
ПереместитьФигуру (*Фигура, координаты)
УвеличитьФигуру (*Фигура, коэффициент);
УдалитьФигуру (*Фигура);
Или же вот
Фигура фиг ();
фиг. переместить (координаты);
фиг. увеличить (коэффициент);
~фиг ();
Игорь Сергиевич
Первое, разумеется - меньше оверхедов
Похожие вопросы
- Зачем нужны классы в с++?
- Зачем нужны классы в c++? Никак не могу понять... Что такое private, public зачем они нужны и т. д?
- Извините за тупой вопрос, но для чего в c++ нужны классы? Для того что бы было легко отсортировать код или ещё зачем?
- Assembler помогите создать файлы *.obj *.exe
- while(!((str[i]>='0'&&str[i]<='9')||str[i]=='\0')) как перевести на человеческий язык это условие? - Язык си
- Что оптимальнее: a -= b или a = a - b ? [obj c]
- чем отличаются между собой С С++ и Obj C ?
- Нужны ли для программирования 10 и 11 класс? я уже в 9 классе уйти ли мне с 9 класса или остаться и учить 10-11 классы?
- Почему лучше идти на програмиста после 11 класса в универ? и почему после 9 класса прогрмисты не нужны?
- Статичная функция внутри класса. какие данные будут доступны всем образцам класса?