UniLecs #Quiz 1. Основы ООП

UniLecs #Quiz 1. Основы ООП

UniLecs

Здесь мы коснемся основных вопросов по ООП, ответы на ктр должен знать любой разработчик. 

  1. Расскажите своими словами, что такое объектно-ориентированное программирование?
    Это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования.
    ! Есть и другое мнение по поводу определния понятия ООП, один из отцов-основателей ООП, считает, что объектно-ориентированный подход заключается в следующем наборе основных принципов:
    - Всё является объектом
    - Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.
    - Каждый объект имеет независимую память, которая состоит из других объектов.
    - Каждый объект является представителем класса, который выражает общие свойства объектов (таких, как целые числа или списки).
    - В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.
    - Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.


  2. Опишите, что такое объект в ООП?
    Объектом называется экземпляр класса, он имеет свое собственное состояние, поведение и идентичность.

  3. Опишите, что такое класс в ООП ?
    Класс - это представление типа объекта. Это план / шаблон, который описывает детали объекта.

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

  5. Назовите базовые принципы ООП ?
    Абстракция. Инкапсуляция. Наследование. Полиморфизм.

  6. Расскажите, что такое инкапсуляция ?
    Инкапсуляция - это ограничение доступа одних компонентов программы к другим и скрытие деталей реализации. Это то, как мы определяем видимость свойств и методов класса, используя модификаторы доступа:
    - public: публичный, общедоступный. Свойства и методы, объявленные с модификатором public, видны другим классам.
    - private: закрытый, противоположность модификатору public. Закрытый класс или член класса доступен только из кода в том же классе.
    - protected: доступ разрешен только внутри самого класса и наследующим его классам.


  7. Расскажите, что такое наследование ?
    Наследование - это концепция, в которой один класс разделяет структуру и поведение, определенные в другом классе. Класс-наследник создаётся на основе уже существующего класса - родитель (базовый), сохраняя его функциональность, не копируя код и имея возможность менять или добавлять дополнительную функциональность. 

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

  9. Расскажите, что такое полиморфизм ?
    Полиморфизм означает способность функции обрабатывать данные разных типов. Это сопоставление поведения или значения в подклассе тому, что уже было объявлено в базовом классе.

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

  11. Объясните, в чем разница между интерфейсом и абстрактным классом ?
    Интерфейс подобен протоколу. Он не определяет поведение объекта, но указывает, как он должен действовать. Абстрактный класс является частично построенным классом. Это похоже на документ с пробелами для заполнения. В интерфейсе, в отличие от абстрактного класса, не может быть объявлен конструктор. Интерфейс реализуется, а абстрактный класс наследуется. В интерфейсе, по сравнению с абстрактным классом, не может быть свойств, и не определены тела у методов. Абстрактный класс, в отличие от интерфейса, может иметь не только публичные методы.

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


  13. Расскажите, что такое конструктор объекта ?
    Конструктор - это метод, используемый для инициализации состояния объекта, он запускается при создании объекта. Имя конструктора должно быть таким же, как имя класса (почти во всех ЯП). Конструктор не должен иметь тип возврата, но может иметь параметры инициализации и может быть перегружен. Есть смысл использовать, когда нужна «функция инициализации», то есть некоторые действия, которые должны выполняться именно на этом этапе.

  14. Расскажите, что такое деструктор объекта ?
    Деструктор - это метод, который автоматически вызывается, когда объект уничтожается. Имя деструктора совпадает с именем класса, но с символом тильды перед именем. Как и конструктор, деструктор используется, когда есть действия, которые должны выполняться именно на этом этапе.

  15. Расскажите, что такое модификатор static ?
    Модификатор static определяет члены классов, которые разделяются всеми экземплярами этого класса и хранятся в одном месте. Нестатические элементы данных создаются для каждой переменной объекта класса. Статические функции могут обеспечивать функциональность, относящуюся к определенному классу, не требуя от программиста сначала создавать экземпляр этого класса. Неспособность объявить статические члены класса привела бы к необходимости объявлять эти данные на глобальном уровне программы.

  16. Объясните разницу между понятиями: перегрузка и переопределение (overloading / overriding) ?
    - Overloading означает наличие двух методов с тем же именем метода и параметрами. Один из методов находится в родительском классе, а другой - в дочернем (класс-наследник). Перегрузка - это пример полиморфизма во время выполнения.
    - Overriding возникает, когда два или более метода в одном классе имеют одно и то же имя метода, но разные параметры. Переопределения - это пример полиморфизма во время компиляции.


  17. Расскажите, что такое указатель this ?
    Указатель this относится к текущему объекту класса. this используется как указатель, который отличает текущий объект от глобального объекта. Этот указатель существует всюду внутри класса, его не надо как-то явно объявлять, к нему можно обращаться внутри любого метода класса.

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

  19. Расскажите, что такое гетеры/сетеры (getters/setters) ?
    Это методы для установления и получения значения приватных свойств класса. Другими словами getters и seters инкапсулируют поля класса, делая их доступными только через свои общедоступные методы, сохраняя сами значения приватными (private).

  20. Расскажите, что такое клонирование объектов в ООП ?
    Клонирование относится к созданию точной копии объекта, это процесс создания другой точной копии объекта, а не только ссылки на него.

Report Page