Когда мы должны инкапсулировать коды, чтобы быть «классом»?

0

Я до сих пор оглядывался на свой код и обнаружил, что я редко писал class. Или, другими словами, я не вижу смысла использовать их. Я имею в виду, почти все в кодировании, я могу работать с ними без использования классов, просто записывая функции и группируя их в разные файлы .h/.cpp на основе их функциональности.

Даже после того, как я участвовал в нескольких проектах, я все еще не чувствую настоятельной необходимости делать это, поскольку прогресс идет хорошо без больших проблем. Я работаю в основном с C++ (иногда MATLAB).

Обратите внимание, что я использовал struct много, и я знаю, что структура и класс не имеют большой разницы для C++. Но я использую только структуру для хранения данных (вместе взятые данные группы). Данные не требуют управления потоком (т.е. Геттеры/сеттеры, которые поддерживают или защищают внутреннее состояние) и не начинают приобретать какие-либо основные функции.

Может быть, мне не хватает кое-чего об основных вещах в ООП. Итак, когда мы должны инкапсулировать наши коды с помощью классов? Может ли кто-нибудь поделиться своим мнением?

  • 5
    Зависит от языка. Удачи в написании Java без классов.
  • 0
    @sftrabbit В последнее время ориентирован на C ++.
Показать ещё 10 комментариев
Теги:
class
oop
encapsulation

2 ответа

4
Лучший ответ

В C++ struct и class являются одинаковыми, за исключением другого модификатора доступа по умолчанию. члены struct по умолчанию являются public, а члены class по умолчанию являются private. Если мы рассматриваем классы в C++ как class с инкапсулированными членами данных и функциями публичного члена, которые раскрывают функциональность, связанную с этими данными, следующие несколько хороших предложений, которые вы хотите использовать для класса:

  1. Вам нужно сохранить некоторое состояние, состоящее из связанных элементов данных, и...
  2. Вам нужно наложить некоторые инварианты на это состояние или предоставить некоторый альтернативный интерфейс этому состоянию.

Если у вас есть только предложение 1, вам, вероятно, просто нужна структура. См. " Классы должны использовать инварианты".

  • 1
    Многие люди [нужная цитата] склонны относиться к классам struct-key и class-key разному, хотя бы только для эстетики.
3

Вы можете писать бесклассовый код на большинстве языков. В Java вы просто используете static методы и ничего больше.

С помощью C/C++ - struct связывает группу значений вместе в единое целое, чтобы сформировать единый компонент, который может быть создан и манипулировать ими по отдельности.

В тот момент, когда вы обнаружите, что вам нужны class es и экземпляры классов (как правило, объекты), это момент, когда вы растете в своей кодировке. С class вы связываете несколько полей вместе (как и с struct s), но здесь вы также присоединяете к ним method. Теперь вы работаете с объектами, которые имеют структуру и функцию.

Как только этот шаг будет завершен, вы обнаружите совершенно новый мир программирования, в который вы помещаете эти объекты в другие объекты или в queue для транспортировки или на map и set для хранения, а затем обнаруживаете, что map и set и queue сами по себе являются объект со своим class.

В итоге - работа с простым process - это как построить свой дом с песком. Работа со struct строит ваш дом с помощью палочек. Работа с class es позволяет вам создавать object и манипулировать ими как сущностями - построить свой дом с камнем - вы можете отступить от процесса, с которым вы так долго трудились, и начать рассматривать архитектуру вашей системы.

  • 1
    struct s может иметь функции-члены. Нет никакой разницы. Вы получаете класс независимо от того, какое ключевое слово вы используете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню