Добавить в корзинуПозвонить
Найти в Дзене
Old Programmer

Объектно-ориентированное программирование (C++). Статья 1 (динамические и статические объекты, три кита ООП)

Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). А здесь все материалы по языкам программирования C и C++. А сюда можно зайти, чтобы посмотреть материалы по объектно-ориентированному программированию. Мои последние статьи по разным темам программирования Элементы ООП Ну наконец дошло и до объектного программирования. Сейчас я скажу крамольную вещь, за что некоторые гуру программирования будут кидать в меня камни. Начните изучать объектное-ориентированное программирование (ООП) с языка С++. Да многие считают, что C++ в этом отношении не образец, но что делать, я обучался именно на этом языке и считаю, что разобравшись в ООП в C++, можно спокойно приступать к другим объектным языкам программирования. Да, конечно, C++ позволяет писать и с использованием объектного подхода и без его использования и смешивая объектный подход с обычным процедурным. Но, согласитесь, что это же все таки дело вкуса. И ес
Оглавление

Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). А здесь все материалы по языкам программирования C и C++. А сюда можно зайти, чтобы посмотреть материалы по объектно-ориентированному программированию.

Список разделов канала Old Programmer, канала о программировании и программистах
Old Programmer27 мая 2021

Мои последние статьи по разным темам программирования

Программирование. Строки в языке программирования Python (слайсы). Статья 1
Old Programmer22 июля 2020
Рекурсия в программировании (глобальные переменные). Статья 3
Old Programmer21 июля 2020
Из записок старого программиста. Компьютерная революция
Old Programmer20 июля 2020
Postgres. Пишем запросы на SQL (подзапросы, limit, группировка). Статья 3
Old Programmer20 июля 2020
Языки программирования. Полушутя
Old Programmer19 июля 2020

Элементы ООП

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

Да, конечно, C++ позволяет писать и с использованием объектного подхода и без его использования и смешивая объектный подход с обычным процедурным. Но, согласитесь, что это же все таки дело вкуса. И если вы хотите понять ООП, то начните писать программы в ООП парадигме и избегать свободных функций и переменных. С другой стороны объект это просто обобщение обычного типа данных и все.

На чем основывается ООП

И так на чем же зиждется ООП? Три кита: инкапсуляция, наследование, полиморфизм и четвертый кит - абстрагирование. Начну с последнего. Абстрагирование позволяет увидеть в окружающем мире или предметной области некие сущности, которые можно описать как набор свойств и методов. При таком конструировании мы должны отбрасывать несущественные свойства, т.е. абстрагироваться. Уметь абстрагироваться от не существенного - это дело практики.

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

Также как обычную переменную в С++ объект можно создать двумя способами: статически и динамически. Вот на это я и хотел бы сегодня обратить внимание. Кроме этого члены класса (т.е. свойства и методы) могут быть открытыми (public) и закрытыми (private). Разница между ними в том, что закрытые члены не видны извне объекта, а открытые видны. Чтобы сильно не грузить читателя, приступим к примерам, перенеся другие вопросы ООП в следующие статьи. Примеры пока в этой статье не несут никакой особой смысловой нагрузки.

Примеры объектно-ориентированного программирования на C++

В следующем примере (main25.cpp) как раз и продемонстрировано все то, что я написал выше. Это пример того, как создаются объекты статически, т.е. код объекта создается еще на стадии компиляции. Соответственно по выходу из функции, где этот объект создавался, освобождается стек и та память, которую код выделял под объект. Свойство s у нас закрыто, поэтому обращаться к нему мы можем только внутри методов объекта. А к свойствам a, b и функциям add и pri можно обращаться и извне. Заметим, что методы мы объявили внутри класса, но описали их вне определения класса. Это не принципиально, можно весь код метода поместить внутри определения класса. Однако я рекомендую все таки отделять код методов от определения класса. Так удобнее.

Следующий пример (main25a.cpp) делает в точности все тоже самое, что предыдущий. Но есть одно отличие: объект создается и удаляется динамически, во время выполнения программы с помощью операторов new и delete. Суть динамического подхода заключается в том, что мы определяем указатель, соответствующий данному типу (классу), потом выделяем память и присваиваем адрес памяти указателю. Естественно, потом эту память следует освободить. Надеюсь вы поняли разницу между точкой и знаком ->.

Ну что, заходите и читайте мои статьи, оставляйте вопросы и замечания. Пока! Подписывайтесь на мой канал Old Programmer.

Программы main25.cpp
Программы main25.cpp