Главная страница
Навигация по странице:

  • Кыргызский Государственный Университет им. И.Арабаева Факультет «Физико-математического образования и информационных технологий»

  • По Практикум программирования по решению предметно-ориентированных задач на ПК Т: Полиморфизм в Java Выполнила студентка гр

  • Проверил

  • Полиморфизм в java Типы полиморфизма Динамический полиморфизм Преимущества и недостатки полиморфизма

  • ЧТО ТАКОЕ ПОЛИМОРФИЗМ В ПРОГРАММИРОВАНИИ

  • Animal : Dog и Cat

  • Вывод: Управлять автомобилем ДИНАМИЧЕСКИЙ ПОЛИМОРФИЗМ

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

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

  • ОПЕРАТОР JAVA INSTANCEOF instanceof

  • Animal {}public class Cat extends Animal {}public class MaineCoon extends Cat

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


    Скачать 234.35 Kb.
    НазваниеНаправление Инфарматика срс по Практикум программирования по решению предметноориентированных задач на пк т Полиморфизм в Java
    АнкорПолиморфизм в жава
    Дата02.05.2023
    Размер234.35 Kb.
    Формат файлаdocx
    Имя файласрс.java.docx
    ТипПрактикум
    #1101708

    Министерство образования Кыргызской Республики

    Кыргызский Государственный Университет им. И.Арабаева

    Факультет «Физико-математического образования и информационных технологий»

    Кафедра «Прикладная информатика»

    Направление «Инфарматика»

    СРС

    По Практикум программирования по решению предметно-ориентированных задач на ПК

    Т: Полиморфизм в 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 {

    @Override

    public void eat() {

    System.out.println("Dog is eating bones...");

    }

    }

    public class Cat extends Animal {

    @Override

    public 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.26

    Sтреугольника = 5

    Sпрямоугольника = 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);

    }

    }

    Вывод:

    true

    false

    Главный вопрос, на который нужно ответить, — как именно instanceof расшифровывает понятие «объект создан на основе класса»?

    У нас в результате получилось Сat instanceof Animal == true, но ведь к такой формулировке можно и придраться. Почему это объект Cat создается на основе класса Animal? Разве он не создается только на основе собственного класса.

    Ответ достаточно прост, и ты, возможно, уже додумался до него.

    ЛИТЕРАТУРА

    Оператор Java instanceof | Baeldung (turbopages.org)

    Оператор Instanceof java, как работает? (javarush.com)

    ООП в Java: виды полиморфизма на простых примерах. Статический и динамический полиморфизм (proglib.io)



    написать администратору сайта