Подготовка к собеседованию на Программиста

Вы ищете интервью в качестве инженера-программиста? Вот классический вопрос, который задает вам интервьюер:

«Что такое объектно-ориентированное программирование?»

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

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

Что такое объектно-ориентированное программирование?

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

  • Класс
    Определяемые пользователем типы данных, которые служат образцом для объектов, атрибутов и методов.
  • Объект
    Экземпляр класса с более определенными данными.

Что такое концепции ООП?

Когда дело доходит до ООП, есть четыре (04) основных концепции.

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

Абстракция

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

Интерфейс

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

Абстрактный класс

Абстрактный класс — это ограниченный класс, который нельзя использовать для создания объектов. Следовательно, чтобы получить к нему доступ, он должен быть унаследован другим классом.

Абстрактные классы не могут быть созданы. Он может определять и реализовывать методы. Подклассы могут реализовывать или переопределять определенные методы в родительском классе. Он также может содержать переменные.

Абстрактные методы — это методы без тела, которые можно использовать только в абстрактном классе. Тело наследуется от производного дочернего/подкласса. Поэтому при доступе к нему нам нужно использовать ключевое слово override.

Класс может наследовать только один абстрактный класс, но может использовать несколько интерфейсов. Абстрактные классы могут иметь конструктор.

Абстрактное против Запечатанного

Запечатанный класс предотвращает расширение или наследование класса. Его нельзя объявить абстрактным.

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

Инкапсуляция

Это концепция объединения методов и элементов данных в единое целое. Тем самым контролируя уровень доступа к своим данным и методам.

Для этого мы используем модификаторы доступа.

  • Частный — доступен только тому классу, в котором он находится.
  • Общедоступно — доступно из любой точки проекта.
  • Защищено — доступно только из класса и его производного класса.
  • Внутренний — доступен только внутри своей сборки (тот же проект).
  • Защищенный внутренний — доступен в производном классе или той же сборке.
  • Private Protected — доступен в классе или производном классе в той же сборке.

Наследование

Когда класс является производным от другого класса, создается иерархия общих атрибутов и/или методов.

Четыре (04) основных типа наследования:

  • Единичное наследование
    Класс A является родительским классом.
    Класс B является производным от класса A. Таким образом, наследуя его функции и поведение.
  • Множественное наследование
    Класс A и класс B являются родительскими.
    Класс C является производным от обоих классов A и B.
    Не поддерживается в ASP.NET, C#, VB, F#, Java
  • Многоуровневое наследование
    Класс A является родительским классом.
    Класс B является производным от класса A.
    Класс C является производным от класса B.
  • Иерархическое наследование
    Класс A является родительским классом.
    Класс B и класс C являются производными от класса A.
    Класс D и класс E являются производными от класса B.
    Класс F и класс G являются производными от класса C.

Полиморфизм

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

Существует два (02) типа полиморфизма:

Полиморфизм времени компиляции

Это когда объект связывается с функциональностью во время компиляции. Это достигается с помощью «перегрузки метода».

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

public function add(int a, int b){
  return a + b;
}
public function add(int a, int b, int c){
  return a + b + c;
}

Полиморфизм во время выполнения

Это когда объект связан с функциональностью во время выполнения. Это достигается с помощью «переопределения метода». Путем переопределения это обеспечивает новую реализацию (тело) для метода, унаследованного от родительского класса. Это также называется динамическим или поздним связыванием.

// Base class
public class User 
{
  public virtual void GetInfo()
  {
    Console.WriteLine("Base Class");
  }
}
// Derived class
public class Client : User
{
  public override void GetInfo(){
      Console.WriteLine("Derived Class");
  }
}

Мы используем ключевое слово virtual в методе базового класса, чтобы метод можно было переопределить с некоторыми дополнительными функциями в производном классе с помощью override ключевое слово.

Заключение

Эта история посвящена самым основам объектно-ориентированного программирования, чтобы помочь вам подготовиться к собеседованию.

Обмен знаниями — единственный способ получить знания. Не стесняйтесь добавлять и вносить свой вклад через комментарии для тех, кому может быть полезна эта история.

Веселиться! Наслаждайтесь кодированием!