Учебники по программированию - страница 2

 

Объектно-ориентированное программирование за 7 минут | Мош



Объектно-ориентированное программирование за 7 минут | Мош

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

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

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

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

Полиморфизм, происходящий от греческих слов «поли» (много) и «морф» (форма), относится к способности объектов принимать различные формы или поведения. В ООП полиморфизм позволяет рассматривать объекты разных типов как объекты общего типа. Эта концепция достигается за счет переопределения и перегрузки методов. Переопределение метода позволяет подклассу обеспечить собственную реализацию метода, унаследованного от его суперкласса. Например, на странице может потребоваться отрисовка различных HTML-элементов, но каждый элемент имеет свое уникальное поведение при отображении. Реализуя метод рендеринга в каждом объекте, мы можем добиться полиморфизма и упростить код, избавившись от длинных операторов if-else или switch-case. С другой стороны, перегрузка методов позволяет нескольким методам с одинаковыми именами, но разными списками параметров сосуществовать в классе. Полиморфизм обеспечивает гибкость кода, улучшает читаемость кода и продвигает принцип «программирования для интерфейса», а не для конкретной реализации.

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

Object-oriented Programming in 7 minutes | Mosh
Object-oriented Programming in 7 minutes | Mosh
  • 2018.03.29
  • www.youtube.com
Get the COMPLETE COURSE: http://bit.ly/2keDCna4 pillars of object-oriented programming: encapsulation, abstraction, inheritance and polymorphism. Subscribe f...
 

Введение в объектно-ориентированное программирование — ускоренный курс


Введение в объектно-ориентированное программирование — ускоренный курс

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

Объектно-ориентированное программирование позволяет нам группировать переменные одного типа вместе, что упрощает управление сложными программами. В прошлом примитивные типы данных, такие как byte, int, float, double, boolean и char, использовались для хранения одиночных простых значений. Однако по мере того, как программы становились все более сложными, программистам требовался способ группировать связанные переменные вместе.

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

С появлением объектно-ориентированного программирования появились объекты. Объект — это экземпляр класса, который служит шаблоном для объектов. Объекты могут хранить данные и определять функции. Класс определяет общие атрибуты и поведение объектов, в то время как объекты представляют конкретные экземпляры со своими собственными уникальными данными.

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

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

В следующих разделах мы обсудим остальные принципы объектно-ориентированного программирования: наследование и полиморфизм. Эти принципы еще больше повышают гибкость и возможность повторного использования кода в объектно-ориентированном программировании.

Вот и все введение в объектно-ориентированное программирование. Давайте перейдем к следующему разделу и рассмотрим инкапсуляцию более подробно.

  • 00:00:00 В этой лекции мы рассмотрим, что такое объектно-ориентированное программирование и как оно работает. Мы обсудим, как работают примитивные типы данных, такие как байты, целые числа, числа с плавающей запятой, двойные и логические значения, и как структуры могут помочь организовать и хранить данные более эффективно. Мы также рассмотрим, как создаются объекты и как они соотносятся друг с другом.

  • 00:05:00 Объектно-ориентированное программирование позволяет группировать связанные данные и функции вместе, что позволяет выполнять сложное программирование без необходимости кодировать все по отдельности. В этом ускоренном курсе мы рассмотрим первый из четырех основных принципов ООП — инкапсуляцию. Мы увидим, как это используется в контексте шахматного примера из предыдущего раздела, и как это упрощает отслеживание связанных атрибутов и управление ими.

  • 00:10:00 Абстракция — это идея сокрытия важных деталей от пользователей класса, а инкапсуляция — практика сокрытия данных от других классов. Эти концепции важны при работе с большими и сложными программами, поскольку при программировании может быть сложно сосредоточиться на общей картине. В этом разделе будет обсуждаться четвертый принцип объектно-ориентированного программирования, абстракция.

  • 00:15:00 В объектно-ориентированном программировании интерфейс — это предопределенный набор методов, которые разрешено использовать двум классам для связи друг с другом. Это предотвращает полное связывание различных частей программы и помогает предотвратить ошибки при обмене данными. наследование — это принцип, который позволяет одному классу наследовать от него другие классы, и в этом видео мы рассмотрим пример.

  • 00:20:00 В этом ускоренном курсе по объектно-ориентированному программированию мы обсудим три основных модификатора доступа: public, private и protected. Мы также обсудим полиморфизм, который описывает методы, которые могут принимать различные формы. Наконец, мы обсудим принцип наследования, который описывает, как классы могут быть связаны друг с другом.

  • 00:25:00 Полиморфизм — это способность метода принимать различные формы в зависимости от иерархии классов, из которой он вызывается. Это работает как динамически, так и статически. Перегрузка позволяет методам с одинаковыми именами иметь разные эффекты, но ее потенциально сложно реализовать.

  • 00:30:00 Это видео знакомит с основами объектно-ориентированного программирования (ООП). Если вам интересно узнать больше об ООП, обязательно посмотрите другие видео из серии «Ускоренный курс».
Intro to Object Oriented Programming - Crash Course
Intro to Object Oriented Programming - Crash Course
  • 2020.09.30
  • www.youtube.com
Learn the basics of object-oriented programming all in one video.✏️ Course created by Steven from NullPointer Exception. Check out their channel: https://www...
 

C++ ООП — Введение в классы и объекты для начинающих



C++ ООП — Введение в классы и объекты для начинающих

Приветствую всех на моем канале! Меня зовут Салдина, и я создаю видео, связанные с ИТ и программированием. Если вас интересуют эти темы, подпишитесь на мой канал и поставьте лайк этому видео.

В этом видео я хочу окунуться в мир объектно-ориентированного программирования (ООП). Итак, что же такое объектно-ориентированное программирование? ООП позволяет нам представлять реальные объекты в программировании вместе с их атрибутами и поведением.

Две фундаментальные концепции ООП — это классы и объекты. Давайте поймем разницу между ними. Класс служит шаблоном или планом, определяющим структуру и поведение объекта. С другой стороны, объект является экземпляром класса. Чтобы проиллюстрировать это, рассмотрим класс, представляющий фрукты, и объектами этого класса могут быть яблоко, банан или персик. Точно так же класс, представляющий автомобили, будет иметь такие объекты, как Volvo, Ford или BMW. У каждого класса есть атрибуты (свойства), такие как имя, цена, максимальная скорость и цвет, а также поведение (методы), например движение, торможение и изменение цвета.

Теперь давайте создадим пример класса под названием «YouTubeChannel». Чтобы создать класс, мы используем ключевое слово «класс», за которым следует имя класса в фигурных скобках. Нам также нужно сделать члены класса доступными за пределами класса, используя модификатор доступа «public». В нашем классе YouTubeChannel мы определим такие атрибуты, как название канала, имя владельца, количество подписчиков и список названий опубликованных видео. Чтобы представить эти атрибуты, мы присваиваем им значения. Мы создаем объект класса YouTubeChannel и обращаемся к его свойствам, используя запись через точку. Например, мы можем присвоить каналу YouTube название «CodeBeauty», а имя владельца — «Saldina».

Мы также можем установить количество подписчиков на 1800 и добавить в список три названия опубликованных видео. Чтобы отобразить информацию, хранящуюся в этих свойствах, мы используем «cout» для их вывода. Для списка опубликованных заголовков видео, который является коллекцией, мы можем перебирать его с помощью цикла и печатать каждое название видео. Запустив программу, мы можем увидеть выходные данные, отображающие детали канала YouTube: имя канала, имя владельца, количество подписчиков и список опубликованных заголовков видео.

В будущих видеороликах мы рассмотрим такие темы, как конструкторы и методы классов, которые обеспечивают более рациональные подходы к работе с классами и объектами.

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

C++ OOP - Introduction to classes and objects for beginners
C++ OOP - Introduction to classes and objects for beginners
  • 2020.08.02
  • www.youtube.com
Object-oriented programming is a programming paradigm that is based on the concept of objects from the real world, and it is used to represent those real wor...
 

C++ ООП (2020) — Что такое конструкторы и методы класса? Как их использовать?


C++ ООП (2020) — Что такое конструкторы и методы класса? Как их использовать?

Всем привет, добро пожаловать на мой канал! Меня зовут Салдина, и на этом канале я создаю видео на тему программирования. Если это вас заинтересовало, рассмотрите возможность подписки и лайкните это видео. В этом видео я хочу поговорить о конструкторах и методах класса.

В предыдущем уроке мы написали код для класса YouTubeChannel. Он имеет четыре общедоступных свойства: имя, имя владельца, количество подписчиков и список опубликованных заголовков видео. Мы создали объект этого класса и присвоили значения его свойствам. Теперь давайте решим проблему с этим подходом. Если мы хотим создать еще один объект канала YouTube, нам придется скопировать и вставить код и внести соответствующие изменения. Это нарушает принцип «Не повторяйся». Чтобы решить эту проблему, мы можем использовать конструкторы и методы класса.

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

Давайте создадим метод класса с именем getInfo, который записывает информацию о канале. Мы можем переместить код для отображения информации в этот метод и использовать его для обоих объектов. Чтобы вызвать метод getInfo, мы можем вызвать его для объекта, используя имя объекта, за которым следует точка и имя метода. Таким образом, мы можем отображать информацию для обоих каналов без дублирования кода.

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

Я надеюсь, что вы нашли это видео полезным. Если вам понравилось, ставьте палец вверх и подписывайтесь на мой канал. Не забудьте нажать на колокольчик, чтобы оставаться в курсе. Увидимся в моем следующем видео. Пока!

C++ OOP (2020) - What are constructors and class methods? How to use them?
C++ OOP (2020) - What are constructors and class methods? How to use them?
  • 2020.08.09
  • www.youtube.com
In this video, I'm explaining when, why, and how are constructors and class methods used.📚 Learn how to solve problems and build projects with these Free E-...
 

C++ ООП - Что такое инкапсуляция в программировании?



C++ ООП - Что такое инкапсуляция в программировании?

Всем привет! Меня зовут Салдина, и добро пожаловать на мой канал, посвященный программированию. Если вы интересуетесь программированием, рассмотрите возможность подписки и лайкните это видео. В этом видео мы обсудим инкапсуляцию.

Во-первых, давайте быстро рассмотрим код из наших предыдущих видео. У нас есть класс YouTubeChannel с общедоступными атрибутами: имя, имя владельца, количество подписчиков и список названий опубликованных видео. У нас также есть конструктор YouTubeChannel и метод getInfo.

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

Чтобы скрыть свойства от пользователей, мы сделаем их приватными. Изменив их модификатор доступа на private, мы ограничим прямой доступ к этим свойствам. Однако это приводит к ошибкам, поскольку закрытые члены теперь недоступны за пределами класса. Чтобы позволить пользователям изменять количество подписчиков, мы создаем два метода: подписка и отказ от подписки. Метод подписки увеличивает количество подписчиков, а метод отписки уменьшает его. Используя эти методы, пользователи могут взаимодействовать с классом и следовать правилам, определенным методами.

Мы столкнулись с проблемой в методе отказа от подписки. В настоящее время он позволяет счетчику стать отрицательным. Чтобы исправить это, нам нужно добавить проверку, которая гарантирует, что счетчик больше нуля перед его уменьшением. Кроме того, у нас есть еще одна частная собственность, опубликованные названия видео, которая сейчас недоступна. Чтобы предоставить доступ к этому свойству, мы создадим метод с именем publishVideo. Этот метод принимает строковый параметр (название видео) и добавляет его в список опубликованных заголовков видео с помощью метода push_back.

Наконец, мы предоставили методы, которые позволяют пользователям взаимодействовать с классом и манипулировать частными свойствами. Чтобы дополнительно контролировать доступ к свойствам имени и имени владельца, мы можем создать методы получения и установки.

Подводя итог инкапсуляции:

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

Если у вас есть код, реализующий методы получения и установки, не стесняйтесь поделиться им в разделе комментариев для обзора.

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

C++ OOP - What is encapsulation in programming?
C++ OOP - What is encapsulation in programming?
  • 2020.08.17
  • www.youtube.com
Encapsulation is one of the most important characteristics of Object-Oriented Programming. Encapsulation helps in data hiding and is used to prevent direct a...
 

C++ ООП - Что такое наследование в программировании?



C++ ООП - Что такое наследование в программировании?

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

Я написал код в предыдущих видео этого курса. Если вы их не видели, обязательно посмотрите. Ссылки дам в описании видео. Позвольте мне быстро просмотреть код, чтобы помочь вам понять его. Я создал класс YouTubeChannel с четырьмя общедоступными атрибутами: имя, имя владельца, количество подписчиков и список названий опубликованных видео. Также присутствуют конструктор YouTubeChannel и метод getInfo. Вы можете увидеть код конструктора здесь.

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

Давайте рассмотрим задачу, чтобы понять, зачем нужна инкапсуляция. Что, если я установлю количество подписчиков этого канала YouTube на один миллион? Этого нельзя допускать. Если я запущу код, вы увидите, что у канала теперь миллион подписчиков. Однако для получения подписчиков, естественно, требуется, чтобы пользователи вызывали методы подписки и отмены подписки. Используя эти методы, количество подписчиков увеличивается или уменьшается. Чтобы скрыть эти свойства от пользователя, мы делаем их приватными, а не общедоступными. Это означает, что к ним можно получить доступ только внутри самого класса. Чтобы пользователи могли изменять количество подписчиков, мы создаем два метода: subscribe и unsubscribe. Метод подписки увеличивает количество подписчиков, а метод отписки уменьшает его.

Теперь, чтобы увеличить или уменьшить количество подписчиков, нам нужно вызвать эти методы. Например, youtubeChannel.subscribe() используется три раза для имитации трех подписок. Если я вызову youtubeChannel.unsubscribe(), а затем вызову getInfo, вы увидите, что есть два подписчика. Мы также столкнемся с ошибкой времени компиляции, поскольку свойство опубликованных заголовков видео теперь закрыто и недоступно. Чтобы решить эту проблему, мы создаем метод с именем publishVideo, который добавляет заголовок видео в список опубликованных заголовков видео. Метод принимает параметр title, позволяя пользователю указать заголовок видео. Вызывая youtubeChannel.publishVideo("Title"), мы добавляем видео в список.

Таким образом, инкапсуляция включает в себя создание частных свойств и предоставление общедоступных методов для их изменения. Методы получения и установки можно использовать для доступа и изменения определенных свойств. Не стесняйтесь делиться своей реализацией методов получения и установки в комментариях для обзора.

Если вы нашли это видео полезным, ставьте палец вверх, подписывайтесь на мой канал и жмите на колокольчик. Оставайтесь с нами, чтобы увидеть больше видео. Увидимся в следующий раз! Пока!

C++ OOP - What is inheritance in programming?
C++ OOP - What is inheritance in programming?
  • 2020.08.20
  • www.youtube.com
Inheritance is one of the most important characteristics of Object-Oriented Programming. Inheritance is a process in which one class (aka derived class/child...
 

C++ ООП - Что такое полиморфизм в программировании? (простой пример)



C++ ООП - Что такое полиморфизм в программировании? (простой пример)

Всем привет, добро пожаловать на мой канал. Меня зовут Салдина, и я создаю видеоролики, связанные с ИТ и программированием. Если вам это интересно, подписывайтесь на мой канал и ставьте лайк этому видео. В этом конкретном видео я хочу поговорить о полиморфизме.

Полиморфизм относится к способности объекта иметь несколько форм. Это означает, что у вас может быть два или более объектов, наследуемых от одного и того же базового класса. Эти объекты могут иметь метод с одним и тем же именем, но разными реализациями, что приводит к разному поведению. Давайте взглянем на код, который мы написали на моих предыдущих курсах. Я создал класс под названием «YouTubeChannel» с частными свойствами, такими как имя, количество подписчиков и названия опубликованных видео. У него также есть защищенное свойство под названием «имя владельца». Кроме того, существуют общедоступные методы, конструктор, метод «getInfo» и методы «подписаться/отписаться».

Далее у нас есть канал YouTube определенного типа под названием «CookingYouTubeChannel», который наследуется от базового класса. У него есть собственный конструктор и дополнительный метод под названием «практика», специфичный для кулинарных каналов. Теперь я хочу создать еще один производный класс под названием «SingersYouTubeChannel» для канала YouTube о пении. У этого класса также есть метод «практики», но реализация отличается от кулинарного канала. Певцы практиковались в пении, разучивали новые песни и даже танцевали.

Чтобы продемонстрировать полиморфизм, я создаю экземпляры кулинарных и певческих каналов на YouTube. Затем я вызываю метод «практики» на каждом канале. Вы можете видеть, что соответствующие реализации вызываются в зависимости от типа канала. Кроме того, я добавляю свойство contentQuality для отслеживания качества контента. Каждый раз, когда вызывается метод «практика», качество контента повышается. Я также добавляю метод под названием «checkAnalytics», который проверяет рейтинг качества контента и выводит сообщение на основе рейтинга.

Чтобы еще больше продемонстрировать полиморфизм, я использую указатели на базовый класс, чтобы указывать на объекты производных классов. К этим указателям я привязываю адреса кулинарных и певческих каналов на YouTube. Используя эти указатели, я вызываю метод «checkAnalytics» для каждого канала, демонстрируя, что полиморфизм позволяет нам использовать указатели базового класса для вызова методов производного класса.

Я надеюсь, что вы нашли это видео приятным. Если да, то ставьте палец вверх и подписывайтесь на мой канал. Не забудьте нажать на колокольчик, чтобы получать уведомления о будущих видео. Спасибо, и увидимся в моем следующем видео. Пока!

C++ OOP - What is polymorphism in programming? (simple example)
C++ OOP - What is polymorphism in programming? (simple example)
  • 2020.09.01
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Объяснение связи между виртуальными функциями, чистыми виртуальными функциями и абстрактными классами в ООП



Объяснение связи между виртуальными функциями, чистыми виртуальными функциями и абстрактными классами в ООП

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

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

Давайте рассмотрим пример в Visual Studio. Мы создадим класс «Инструмент» с виртуальной функцией «makeSound», которая выводит сообщение. Затем мы создадим производный класс под названием «Accordion», который переопределяет функцию «makeSound» своей собственной реализацией. Используя указатель базового класса для вызова функции, мы видим, что производная версия выполняется. Добавление ключевого слова «виртуальный» к функции базового класса гарантирует, что будет вызвана наиболее производная версия.

Далее давайте обсудим чисто виртуальные функции и абстрактные классы. Чистая виртуальная функция — это виртуальная функция без реализации в базовом классе. Это заставляет производные классы предоставлять свою собственную реализацию. Установив для виртуальной функции значение «равное нулю», мы создаем чисто виртуальную функцию. Это делает базовый класс абстрактным классом, который не может быть создан. Производные классы должны реализовывать чисто виртуальную функцию. Мы создадим класс «Piano», производный от класса «Instrument». Если мы попытаемся создать объект типа "Piano" без реализации чистой виртуальной функции, это приведет к ошибке. Однако, как только мы реализуем функцию в классе "Piano", мы можем успешно создать объект и вызвать функцию.

Наконец, давайте исследуем полиморфное поведение виртуальных функций. У нас есть два указателя инструментов, один указывает на объект «Аккордеон», а другой — на объект «Фортепиано». Создав массив указателей инструментов, мы можем продемонстрировать, что вызов функции makeSound с использованием указателей базового класса приводит к выполнению производных версий функции.

Я надеюсь, что это объяснение поможет вам лучше понять виртуальные функции, чисто виртуальные функции и абстрактные классы. Если у вас есть дополнительные вопросы, пожалуйста, дайте мне знать в комментариях ниже. Спасибо за просмотр, и не забудьте подписаться!

Relationship between Virtual Functions, Pure Virtual Functions and Abstract Classes in OOP explained
Relationship between Virtual Functions, Pure Virtual Functions and Abstract Classes in OOP explained
  • 2021.04.15
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Абстракция объясняется реальными примерами и кодом! - Курс С++ ООП



Абстракция объясняется реальными примерами и кодом! - Курс С++ ООП

В этом видео я расскажу о важной концепции абстракции в объектно-ориентированном программировании. Я объясню, что такое абстракция, и покажу, как реализовать и использовать абстракцию в программировании на C++. Но прежде чем мы углубимся, я хотел бы представить C++ Builder, мощную IDE, которая позволяет быстро разрабатывать приложения для нескольких платформ с меньшим количеством кода. Он легко подключается к различным базам данных и включает в себя мощные библиотеки, такие как платформы VCL и FireMonkey. Начните бесплатно по ссылке в описании.

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

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

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

Давайте создадим абстрактный класс под названием «Смартфон», чтобы проиллюстрировать это. Он объявит общедоступную функцию под названием «Сделать селфи», которая служит важной функцией, которой должны обладать все смартфоны. Сделав эту функцию чистой виртуальной функцией, используя синтаксис «= 0», мы преобразуем класс в абстрактный класс. Мы не можем создавать экземпляры абстрактных классов напрямую, но мы можем создавать указатели на них. Любой класс, который хочет быть смартфоном, должен наследовать от этого абстрактного класса и предоставлять собственную реализацию чистой виртуальной функции.

Например, давайте создадим класс «Android», который наследуется от класса «Smartphone». В этом классе мы реализуем функцию «Сделать селфи» со сложной логикой, специфичной для Android-устройств. Точно так же мы можем создать класс «iPhone», который также наследуется от «Smartphone» и предоставляет собственную реализацию функции «Сделать селфи». У каждого класса может быть своя уникальная реализация, но с точки зрения человека, использующего смартфон, процесс остается прежним.

Абстракция, достигаемая с помощью класса «Smartphone», позволяет разработчикам, работающим над классами Android или iPhone, сосредоточиться на конкретных деталях реализации, не зная логики другого класса. Им нужно только придерживаться контракта, определенного абстрактным классом, обеспечивая реализацию необходимых функций. Используя абстракцию, мы разделяем задачи, упрощаем использование кода и облегчаем модульную разработку. Абстракция позволяет нам создавать стандартизированные интерфейсы и скрывать сложные реализации, что требует большего обслуживания.

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

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

Abstraction explained with real-life examples and code! - C++ OOP Course
Abstraction explained with real-life examples and code! - C++ OOP Course
  • 2021.04.21
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Перегрузка оператора C++ от новичка до продвинутого (подробное объяснение)



Перегрузка оператора C++ от новичка до продвинутого (подробное объяснение)

Всем привет и добро пожаловать на мой канал. Я был в середине своей работы и не планировал снимать это видео, но так как я работаю над очень интересным проектом, я подумал, почему бы не показать вам? В настоящее время я работаю над большим проектом с тысячами файлов и миллионами строк кода. Я собирался проанализировать свой код, что обычно занимает от 10 до 15 минут. Итак, пока мы ждем анализа, я научу вас перегрузке операторов.

Используемый мной анализатор называется PDS Studio, и вы можете получить его бесплатно по ссылке в описании. Я покажу вам, как я использую PDS Studio для поиска ошибок и оптимизации своего кода. После загрузки PDS Studio вам понадобится код для анализа. У меня есть решение из моей работы, но я не могу показать вам код из-за соглашения о неразглашении. Впрочем, результаты анализа я покажу вам позже в видео.

Чтобы проанализировать свой код с помощью PDS Studio, вам нужно щелкнуть вкладку «Расширения» и выбрать PDS Studio. Затем выберите все решение для анализа. Поскольку анализ занимает некоторое время, я переключусь на пустой проект и тем временем научу вас перегрузке операторов.

Перегрузка операторов позволяет нам определить, как определенный оператор ведет себя с определенным типом данных. Например, оператор «плюс» ведет себя по-разному при использовании с числами по сравнению с использованием с пользовательским типом данных. Мы можем создать операторные функции для определения этого поведения. Я объясню эту концепцию на примере добавления двух пользовательских типов данных.

В C++ мы можем создавать операторные функции, используя ключевое слово «оператор», за которым следует оператор, который мы хотим перегрузить. Например, мы можем перегрузить оператор «плюс», создав функцию «оператор+». Я продемонстрирую это, создав структуру под названием «YouTubeChannel» с двумя атрибутами: «name» и «subscribersCount». Мы также создадим конструктор для этой структуры.

Чтобы перегрузить оператор вставки (<<) для нашего типа YouTubeChannel, нам нужно определить функцию «operator<<». Эта функция принимает два параметра: объект типа "ostream" (например, "cout") и объект типа "YouTubeChannel". Мы передаем эти параметры по ссылке, чтобы избежать ненужного копирования.

Внутри функции «operator<<» мы используем объект «ostream» для вывода информации о YouTubeChannel. В этом случае мы печатаем имя и количество подписчиков. Перегружая оператор вставки, мы разрешаем печать объектов YouTubeChannel с помощью команды «cout».

Чтобы использовать перегруженный оператор вставки, мы можем просто написать «cout << youtubeChannelObject». Это работает аналогично тому, как мы печатаем другие типы, используя «cout». Мы также можем вызвать операторную функцию напрямую, как обычную функцию, передав объект «cout» и объект YouTubeChannel в качестве параметров.

Имейте в виду, что разные операторы имеют разные способы перегрузки. Оператор вставки перегружен с помощью функции «operator<<», но другие операторы, такие как «плюс», «минус», «больше», «меньше», «равно» и т. д., имеют свои собственные специфические операторные функции.

Это все для этого видео. Я надеюсь, что вы нашли это введение в перегрузку операторов полезным. Проверьте описание для списка всех операторов, которые могут быть перегружены в C++. Как только анализ будет завершен, я покажу вам результаты. Если у вас есть какие-либо вопросы, не стесняйтесь задавать их в комментариях. Спасибо за просмотр!

C++ Operator Overloading beginner to advanced (in-depth explanation)
C++ Operator Overloading beginner to advanced (in-depth explanation)
  • 2021.06.30
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
Причина обращения: