1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Концепции объектно-ориентированного программирования — ООП в Java

Концепция объектно-ориентированного программирования (ООП) в Java

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

Давайте узнаем о различных характеристиках языка объектно-ориентированного программирования:

    Полиморфизм : Полиморфизм относится к способности языков программирования ООП эффективно различать сущности с одинаковыми именами. Это делается Java с помощью подписи и объявления этих объектов.

// Java-программа для демонстрации полиморфизма

// Этот класс будет содержать
// 3 метода с одинаковым именем,
// пока программа будет
// компилируем и запускаем успешно

public class Sum <

// Эта сумма принимает два параметра int

public int sum( int x, int y)

// Эта сумма принимает три параметра int

public int sum( int x, int y, int z)

// Эта сумма принимает два двойных параметра

public double sum( double x, double y)

public static void main(String args[])

System.out.println(s.sum( 10 , 20 ));

System.out.println(s.sum( 10 , 20 , 30 ));

System.out.println(s.sum( 10.5 , 20.5 ));

Полиморфизм в Яве в основном бывает двух типов:

  • Перегрузка в Java
  • Переопределение в Java
  • Наследование : Наследование является важной опорой ООП (объектно-ориентированного программирования). Это механизм в Java, с помощью которого один класс позволяет наследовать свойства (поля и методы) другого класса.
    Важная терминология:
    • Суперкласс : класс, свойства которого наследуются, называется суперклассом (или базовым классом, или родительским классом).
    • Подкласс : Класс, который наследует другой класс, известен как подкласс (или производный класс, расширенный класс или дочерний класс). Подкласс может добавлять свои собственные поля и методы в дополнение к полям и методам суперкласса.
    • Возможность повторного использования: Наследование поддерживает концепцию «повторного использования», т.е. когда мы хотим создать новый класс и уже существует класс, который включает в себя часть кода, который мы хотим, мы можем получить наш новый класс из существующего класса. Делая это, мы повторно используем поля и методы существующего класса.

    Ключевое слово, используемое для наследования, расширяет .
    Синтаксис:

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

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

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

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

    В Java абстракция достигается интерфейсами и абстрактными классами . Мы можем достичь 100% абстракции, используя интерфейсы.

  • Класс : класс — это определенный пользователем проект или прототип, из которого создаются объекты. Он представляет собой набор свойств или методов, которые являются общими для всех объектов одного типа. В общем, объявления классов могут включать эти компоненты в следующем порядке:
    1. Модификаторы: Класс может быть публичным или имеет по умолчанию доступа (см это для более подробной информации).
    2. Имя класса: имя должно начинаться с начальной буквы (с большой буквы).
    3. Суперкласс (если есть): расширяется имя родительского класса (суперкласса), если таковое имеется, с предшествующим ключевым словом. Класс может расширять (подкласс) только одного родителя.
    4. Интерфейсы (если есть): Разделенный запятыми список интерфейсов, реализованных классом, если таковые имеются, с предшествующим ключевым словом реализует. Класс может реализовывать более одного интерфейса.
    5. Body: тело класса, окруженное фигурными скобками, <>.
    Читать еще:  Отключается видеодрайвер и восстанавливается
  • Объект : это базовая единица объектно-ориентированного программирования, представляющая реальные объекты. Типичная Java-программа создает много объектов, которые, как вы знаете, взаимодействуют, вызывая методы. Объект состоит из:
    1. Состояние : представлено атрибутами объекта. Это также отражает свойства объекта.
    2. Поведение : оно представлено методами объекта. Он также отражает реакцию объекта на другие объекты.
    3. Идентичность : он дает уникальное имя объекту и позволяет одному объекту взаимодействовать с другими объектами.

    Пример объекта: собака

    Метод . Метод — это набор операторов, которые выполняют определенную задачу и возвращают результат вызывающей стороне. Метод может выполнить какую-то конкретную задачу, ничего не возвращая. Методы позволяют нам повторно использовать код без повторного ввода кода. В Java каждый метод должен быть частью некоторого класса, который отличается от языков, таких как C, C ++ и Python.
    Методы экономят время и помогают нам повторно использовать код без повторного ввода кода.

    Объявление метода

    В общем, объявления методов имеют шесть компонентов:

    • Модификатор доступа : Определяет тип доступа метода, то есть откуда он может быть доступен в вашем приложении. В Java существует 4 типа спецификаторов доступа.
      • public: доступно для всех классов в вашем приложении.
      • protected: доступный в пакете, в котором он определен, и в его подклассе (ах) (включая подклассы, объявленные вне пакета)
      • private: доступно только внутри класса, в котором оно определено.
      • default (объявлено / определено без использования какого-либо модификатора): доступно в том же классе и пакете, в котором определен его класс.
    • Тип возвращаемого значения : Тип данных значения, возвращаемого методом, или void if, если значение не возвращается.
    • Имя метода : правила для имен полей применяются также к именам методов, но соглашение немного отличается.
    • Список параметров : список входных параметров, разделенных запятыми, определяется с указанием типа данных в круглых скобках. Если параметров нет, вы должны использовать пустые скобки ().
    • Список исключений : исключения, которые вы ожидаете с помощью метода, могут выдавать, вы можете указать эти исключения.
    • Тело метода : заключено в фигурные скобки. Код, который необходимо выполнить для выполнения запланированных операций.

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

    Собеседование по Java – ООП (вопросы и ответы). Часть 1.

    Вопросы и ответы по теме ООП (объектно ориентированное программирование) для собеседования по Java.

    К списку вопросов по всем темам

    Список всех вопросов по ООП

    1. Назовите принципы ООП и расскажите о каждом.
    2. Дайте определение понятию “класс”.
    3. Что такое поле/атрибут класса?
    4. Как правильно организовать доступ к полям класса?
    5. Дайте определение понятию “конструктор”.
    6. Чем отличаются конструкторы по-умолчанию, копирования и конструктор с параметрами?
    7. Какие модификации уровня доступа вы знаете, расскажите про каждый из них.
    8. Расскажите об особенностях класса с единственным закрытым (private) конструктором.
    9. О чем говорят ключевые слова “this”, “super”, где и как их можно использовать?
    10. Дайте определение понятию “метод”.
    11. Что такое сигнатура метода?
    12. Какие методы называются перегруженными?
    13. Могут ли нестатические методы перегрузить статические?
    14. Расскажите про переопределение методов.
    15. Может ли метод принимать разное количество параметров (аргументы переменной длины)?
    16. Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?
    17. Как получить доступ к переопределенным методам родительского класса?
    18. Какие преобразования называются нисходящими и восходящими?
    19. Чем отличается переопределение от перегрузки?
    20. Где можно инициализировать статические/нестатические поля?

    21. Зачем нужен оператор instanceof?
    22. Зачем нужны и какие бывают блоки инициализации?
    23. Каков порядок вызова конструкторов и блоков инициализации двух классов: потомка и его предка?
    24. Где и для чего используется модификатор abstract?
    25. Можно ли объявить метод абстрактным и статическим одновременно?
    26. Что означает ключевое слово static?
    27. К каким конструкциям Java применим модификатор static?
    28. Что будет, если в static блоке кода возникнет исключительная ситуация?
    29. Можно ли перегрузить static метод?
    30. Что такое статический класс, какие особенности его использования?
    31. Какие особенности инициализации final static переменных?
    32. Как влияет модификатор static на класс/метод/поле?
    33. О чем говорит ключевое слово final?
    34. Дайте определение понятию “интерфейс”.
    35. Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
    36. Почему нельзя объявить метод интерфейса с модификатором final или static?
    37. Какие типы классов бывают в java (вложенные… и.т.д.)
    38. Какие особенности создания вложенных классов: простых и статических.
    39. Что вы знаете о вложенных классах, зачем они используются? Классификация, варианты использования, о нарушении инкапсуляции.
    40. В чем разница вложенных и внутренних классов?
    41. Какие классы называются анонимными?
    42. Каким образом из вложенного класса получить доступ к полю внешнего класса?

    Читать еще:  Не обновляется ватсап пишет недостаточно памяти

    43. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
    44. Как связан любой пользовательский класс с классом Object?
    45. Расскажите про каждый из методов класса Object.
    46. Что такое метод equals(). Чем он отличается от операции ==.
    47. Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
    48. Если equals() переопределен, есть ли какие-либо другие методы, которые следует переопределить?
    49. В чем особенность работы методов hashCode и equals? Каким образом реализованы методы hashCode и equals в классе Object? Какие правила и соглашения существуют для реализации этих методов? Когда они применяются?
    50. Какой метод возвращает строковое представление объекта?
    51. Что будет, если переопределить equals не переопределяя hashCode? Какие могут возникнуть проблемы?
    52. Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode?
    53. Как вы думаете, будут ли какие-то проблемы, если у объекта, который используется в качестве ключа в hashMap изменится поле, которое участвует в определении hashCode?
    54. Чем отличается абстрактный класс от интерфейса, в каких случаях что вы будете использовать?
    55. Можно ли получить доступ к private переменным класса и если да, то каким образом?
    56. Что такое volatile и transient? Для чего и в каких случаях можно было бы использовать default?
    57. Расширение модификаторов при наследовании, переопределение и сокрытие методов. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость? А если protected? А сузить видимость?
    58. Имеет ли смысл объявлять метод private final?
    59. Какие особенности инициализации final переменных?
    60. Что будет, если единственный конструктор класса объявлен как final?
    61. Что такое finalize? Зачем он нужен? Что Вы можете рассказать о сборщике мусора и алгоритмах его работы.
    62. Почему метод clone объявлен как protected? Что необходимо для реализации клонирования?

    Ответы. Часть 1

    1. Назовите принципы ООП и расскажите о каждом.

    Объе́ктно-ориенти́рованное программи́рование (ООП) — это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

    Основные принципы ООП: абстракция, инкапсуляция, наследование, полиморфизм.

    Абстракция – означает выделение значимой информации и исключение из рассмотрения незначимой. С точки зрения программирования это правильное разделение программы на объекты. Абстракция позволяет отобрать главные характеристики и опустить второстепенные.

    Пример: описание должностей в компании. Здесь название должности значимая информация, а описание обязанностей у каждой должности это второстепенная информация. К примеру главной характеристикой для “директор” будет то, что это должность чем-то управляет, а чем именно (директор по персоналу, финансовый директор, исполнительный директор) это уже второстепенная информация.

    Инкапсуляция – свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе. Для Java корректно будет говорить, что инкапсуляция это “сокрытие реализации”. Пример из жизни – пульт от телевизора. Мы нажимаем кнопочку “увеличить громкость” и она увеличивается, но в этот момент происходят десятки процессов, которые скрыты от нас. Для Java: можно создать класс с 10 методами, например вычисляющие площадь сложной фигуры, но сделать из них 9 private. 10й метод будет называться “вычислитьПлощадь()” и объявлен public, а в нем уже будут вызываться необходимые скрытые от пользователя методы. Именно его и будет вызывать пользователь.

    Читать еще:  Fotaapp что это за программа?

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

    Полиморфизм – свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Пример (чуть переделанный) из Thinking in Java:

    Основы объектно ориентированного программирования

    Наконец то мы добрались до темы: основы объектно ориентированного программирования (ООП) в языке Java. Это очень полезная и нужная тема, без знаний которой продолжать программировать мы не сможем. Для тех кто джаву не знает теория будет тоже полезной и применимой на других языках программирования.

    При изучении статьи: «Классы, методы и конструкторы в Java» мы уже давали определение ООП и установили, что данная парадигма строится на трех китах:

    1. Наследование — концепция, согласно которой класс может частично или полностью повторить свойства и методы родителя (класса, от которого он наследуется).
    2. Инкапсуляция — ограничение доступа до некоего кода и предоставление методов для использования этого кода.
    3. Полиморфизм — способность метода вести себя по разному при разных наборах параметров.

    Еще выделяют такую концепция как абстракция — выделение важных свойств объекта и представление важных аспектов предметной области в виде совокупности заимодействующих друг с другом объектов.

    Если Вы дочитали до этих строк и ничего не поняли — это нормально)). Без примеров и объяснений понять такое невозможно. Тем более, если Вы никогда не сталкивались с ООП. Прежде чем мы перейдем к примерам нам следует познакомиться с понятием интерфейса и абстрактного класса. Интерфейс — это конструкция похожая на класс. Только класс — это представление объекта с набором параметров и методов, а интерфейс — только с набором методов. Причем интерфейс задает поведение класса. Вот как выглядит интерфейс и как он используется:

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

    Если не переопределить методы в классе, компилятор будет выдавать ошибку и запустить программу будет невозможно.

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

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

    Так как мы уже вплотную подобрались к наследованию, предлагаю его и рассмотреть. Как Вы уже поняли в Java механизм наследование реализован абстрактным классом и интерфейсом. В джава наследоваться можно не только от абстрактного класса. Пропишите ключевое слово extends и наследуйте любой класс в которого конструктор не private.

    Давайте посмотрим на популярный пример:

    Результат выполнения кода:

    Для того, чтобы получить конструктор, метод или поле родительского класса, необходимо использовать ключевое слово super. Каждый экземпляр класса имеет неявную ссылку на себя самого. Вместо использования идентификатора имени атрибута вы можете написать this.id, но это необязательно, поскольку эти два объявления эквивалентны.

    В статье модификаторы я не полностью раскрыл тему модификаторов доступа поскольку тогда Вы еще не знали ООП. Сейчас можно дополнить эту тему.

    При наследовании можно изменять модификаторы доступа в сторону большей видимости: private -> default -> protected -> public. Идти можно только в таком порядке. Если Вы попытаетесь изменять модификаторы в сторону меньшей видимости, то получите ошибку компиляции и не сможете запустить свою программу.

    Еще обещалось уделить внимание модификатору abstract. Теперь, когда мы выучили абстрактные классы, стало понятно, что это за модификатор. Класс, который имеет этот модификатор должен быть унаследован. Abstract является противоположностью final, от которых не можно унаследоваться. Запомните: абстрактный класс может не содержать абстрактных методов, но если в класса есть хотя бы один абстрактный метод, он должен быть объявлен как abstract. Создать экземпляр abstract класса нельзя.

    Что еще нужно знать о наследовании:

    • статические методы не наследуются. Их нельзя переопределить. Статический метод вызывается для класса, в котором он определен.
    • конструктор наследника всегда вызывает конструктор родителя. Конструктор суперкласса может быть вызван непосредственно из конструктора наследника используя ключевое слово super. Если такой вызов явным образом не задавался программистом, компилятор поместит вызов конструктора по умолчанию (конструктор без параметров).Если родитель не имеет конструктора по умолчанию, может возникнуть ошибка компиляции.
    • ключевое слово super нельзя использовать в статических методах.
  • Ссылка на основную публикацию
    Статьи c упоминанием слов:
    Adblock
    detector