Файл: Направление Инфарматика срс по Практикум программирования по решению предметноориентированных задач на пк т Полиморфизм в Java.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 06.12.2023

Просмотров: 56

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство образования Кыргызской РеспубликиКыргызский Государственный Университетим. И.АрабаеваФакультет «Физико-математического образования и информационных технологий»Кафедра «Прикладная информатика»Направление «Инфарматика»СРСПо Практикум программирования по решению предметно-ориентированных задач на ПКТ: Полиморфизм в JavaВыполнила студентка гр: ФМО-И-15-20 Талантбекова Т.Т.Проверил: Барганалиева Ж.К. Бишкек 2023г.ПОЛИМОРФИЗМ В JAVAПлан:Введение

  1. Что такое полиморфизм?

  2. Что такое полиморфизм в программировании?

  3. Примеры из жизни

  4. Полиморфизм в java

  5. Типы полиморфизма

  6. Динамический полиморфизм

  7. Преимущества и недостатки полиморфизма

  8. Оператор Java instanceof
ЛитератураВВЕДЕНИЕПолиморфизм – это способность объекта использоваться в качестве объекта другого типа. Он определяется как способность одного метода или функции иметь несколько реализаций.Термин «полиморфизм» происходит от греческого слова «πολύμορφος» (poly - много, morphē - форма), что означает «многоформность». В ООП термин «полиморфизм» обозначает понятие, в соответствии с которым объекты одного класса могут иметь различную форму и область применения.Полиморфизм – это один из основных принципов ООП, который позволяет программистам писать более гибкий и модульный код, упрощает проектирование, экономит время и уменьшает количество ошибок в программном коде.Цель данного СРС – изучить понятие полиморфизма в Java, рассмотреть его различные виды и способы реализации.

  1. ЧТО ТАКОЕ ПОЛИМОРФИЗМ?
Слово «полиморфизм» произошло от двух греческих слов: «Poly» означающего «многочисленный» и «Morph» — форма. Если перевести дословно – бесчисленное множество форм. Живые примеры этого явления можно встретить в земной коре, среди животных и рептилий, а также в других областях науки. Но речь сегодня не об этом, а об основной парадигме ООП, применяющейся во многих языках программирования.

  1. ЧТО ТАКОЕ ПОЛИМОРФИЗМ В ПРОГРАММИРОВАНИИ?
Полиморфизм в ООП подразумевает собой особенность, при которой одно и то же действие выполняется разными способами. Или, проще говоря, такая концепция позволяет выполнять несколько реализаций одной и той же сущности. Чаще всего она возникает при наличии другой парадигмы ООП — наследования, т. е. когда у нас существует множество классов, связанных друг с другом. Наследование позволяет одному классу приобретать свойства и атрибуты другого, а полиморфизм использует унаследованные свойства для выполнения различных задач.

  1. ПРИМЕРЫ ИЗ ЖИЗНИ
Чтобы лучше понять принцип парадигмы, попробуем объяснить это с помощью нескольких простых примеров.Возьмем нас с вами или если совсем обобщенно — человека. Он, в зависимости от различных обстоятельств, может вести себя по-разному. Например, женщина может быть и матерью, и дочерью, и сестрой, и другом одновременно и в разных ситуациях ее действия будут радикально отличаться.А еще в организме человека есть разные органы и у каждого из них есть своя функция: сердце отвечает за кровоток, легкие за дыхание, мозг за когнитивную деятельность. То есть, у нас есть стандартная функция, работающая по-разному в зависимости от органа тела. Теперь перейдем конкретно к Java.

  1. ПОЛИМОРФИЗМ В JAVA
Что мы должны понимать про принцип действия рассматриваемой концепции? Ну во-первых, все то, что содержит или обрабатывает значения различных типов, когда идет компиляция или выполняется программа — является полиморфным, например:

  • любая переменная, которой присваивается значение другого типа;

  • любой объект, обладающий свойствами, изменяющими тип данных присвоенного ему значения;

  • любая функция, принимающая аргументы различных типов.

Рассмотрим небольшой пример по реализации полиморфизма на Java:Пусть у нас есть класс Animal, который имеет метод eat():public class Animal {public void eat() {System.out.println("Animal is eating...");}}Теперь допустим, у нас есть несколько наследников класса Animal: Dog и Cat. И каждый из них по разному ест. Для этого мы можем перегрузить метод eat() у каждого из наследников:public class Dog extends Animal {@Overridepublic void eat() {System.out.println("Dog is eating bones...");}}public class Cat extends Animal {@Overridepublic void eat() {System.out.println("Cat is eating fish...");}}Теперь, если мы создадим объекты Dog и Cat, и вызовем у них метод eat(), то в зависимости от того, какой объект мы вызываем, будет выводиться соответствующее сообщение:Animal animal = new Animal();Dog dog = new Dog();Cat cat = new Cat();animal.eat(); // "Animal is eating..."dog.eat(); // "Dog is eating bones..."cat.eat(); // "Cat is eating fish..."Вывод:Animal is eating...Dog is eating bones...Cat is eating fish...Это и есть пример полиморфизма в Java, когда метод, объявленный в родительском классе, может быть переопределен в наследниках и работать по-разному в зависимости от типа объекта.

  1. ТИПЫ ПОЛИМОРФИЗМА
Два варианта реализации полиморфизма в Java:

  • Overloading – перегрузка метода

  • Overriding – переопределение метода
При перегрузке метода мы в одном классе создаем нескольких методов с одинаковым названием, но разным функционалом, например:class Forms{public void shapearea()) {System.out.println("Площади фигур:");}public void shapearea(int r) {System.out.println("Sкруга = "+3.14*r*r);}public void shapearea(double b, double h) {System.out.println("Sтреугольника ="+0.5*b*h);}public void shapearea(int l, int b) {System.out.println("Sпрямоугольника ="+l*b);}}class Main {public static void main(String[] args) {Forms xForms = new Forms(); xForms.shapearea();xForms.shapearea(3);xForms.shapearea(2.5, 2.0);xForms.shapearea(4,7);}}Вывод: Площади фигур:Sкруга = 28.26Sтреугольника = 5Sпрямоугольника = 28При переопределении название метода дочернего класса мы ставим такое же, как и уже объявленного метода родительского класса, например:class Main {public static void main(String[] args) {Cars model = new Cars(); //создание нового объектаmodel.drive(); //вызов переопределенного метода}}//создаем дочерний классclass Cars extends Vehicles {//определяем одноименный метод
void drive() {System.out.println("Управлять автомобилем");}}class Vehicles{// определение методаvoid drive(){System.out.println("Управлять транспортным средством");}}Вывод:Управлять автомобилем

  1. ДИНАМИЧЕСКИЙ ПОЛИМОРФИЗМ
При динамическом полиморфизме вызвать переопределеный метод можно при выполнении программы. Скопировать метод родительского класса и обозначить его в дочернем можно с помощью ссылочной переменной родительского класса, при этом вызванный метод будет определяться по объекту, на который она ссылается. Такую операцию еще называют Upcasting, например:Создадим один родительский класс Звери и три подкласса: травоядные, плотоядные и всеядные. В этом случае классы-потомки расширили родителя и переопределили его метод eat().class Beast {void eat() {System.out.println("Животные питаются:");}}class herbivorous extends Beast {void eat() {System.out.println("Травоядные едят растения");}}class omnivorous extends Beast {void eat() {System.out.println("Всеядные едят растения и мясо");}}class carnivorous extends Beast {void eat() {System.out.println("Хищники едят только мясо");}}class main {public static void main(String args[]) {Beast X = new Beast();Beast herb = new herbivorous();Beast omni = new omnivorous();Beast carn = new carnivorous();X.eat();herb.eat();omni.eat();carn.eat();}}Вывод:Животные питаются:Травоядные едят растенияВсеядные едят растения и мясоХищники едят мясо

  1. ПРЕИМУЩЕСТВА И НЕДОСТАТКИ ПОЛИМОРФИЗМА

  • Предоставляет возможность повторного использования кода. Реализованные классы можно многократно использовать повторно. Кроме того, это экономит много времени разработчику, ведь при этом появляется возможность поменять что-то в программе, не трогая исходный код.

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

  • Легче отлаживать код, когда его не так много.
Помимо преимуществ, у рассматриваемой парадигмы есть еще и несколько недостатков:

  • Полиморфизм не так просто реализовать на деле.

  • Такой подход снижает читаемость кода.

  • Может вызывать серьезные проблемы с производительностью в режиме реального времени.


  1. ОПЕРАТОР JAVA INSTANCEOF
instanceof - это двоичный оператор, который мы используем для проверки, относится ли объект к заданному типу. Результатом операции является либо истина, либо ложь. Он также известен как оператор сравнения типов, потому что он сравнивает экземпляр с типом.Перед приведением к неизвестному объекту всегда следует использовать проверку instanceof. Это помогает избежать исключения ClassCastException во время выполнения.Основной синтаксис оператора instanceof таков: (object) instanceof (type) Следовательно, чаще всего он встречается в разного рода проверочных условиях (if…else).Начнем с примеров попроще:public class Main {public static void main(String[] args) {Integer x = new Integer(22);System.out.println(x instanceof Integer);}}Как думаешь, что будет выведено в консоль?Ну, здесь это очевидно :) Объект х является Integer, поэтому результатом будет true.Вывод в консоль:true Теперь давай попробуем рассмотреть примеры посложнее. Раз уж мы упомянули наследование, поработаем вот с такой небольшой системой классов: public class Animal {}public class Cat extends Animal {}public class MaineCoon extends Cat {} Мы уже знаем, как ведет себя instanceof, когда мы проверяем принадлежность объекта к какому-то классу в обычной ситуации, но что будет, если мы добавим сюда отношение «родитель-потомок»? public class Main {public static void main(String[] args) {Cat cat = new Cat();System.out.println(cat instanceof Animal);System.out.println(cat instanceof MaineCoon);}}Вывод:truefalseГлавный вопрос, на который нужно ответить, — как именно instanceof расшифровывает понятие «объект создан на основе класса»?У нас в результате получилось Сat instanceof Animal == true, но ведь к такой формулировке можно и придраться. Почему это объект Cat создается на основе класса Animal? Разве он не создается только на основе собственного класса.Ответ достаточно прост, и ты, возможно, уже додумался до него.ЛИТЕРАТУРАОператор Java instanceof | Baeldung (turbopages.org)Оператор Instanceof java, как работает? (javarush.com)ООП в Java: виды полиморфизма на простых примерах. Статический и динамический полиморфизм (proglib.io)