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

  • Наследование (отношение«является», is a

  • Shape shape2 = new Triangle(); 21 22 23 24 25 26 27 28 29 30 31

  • //Circle.draw() //Triangle.draw() Есть общий интерфейс «Фигура» и две его реализации «Треугольник» и «Круг». У

  • «нарисовать». Вызов полиморфного метода позволяет одному типу выразить свое отличие от другого, сходного типа, хотя они и происходят от одного базового типа.

  • Это отличие выражается различным действием методов, вызываемых через базовый класс (или интерфейс). Здесь приведен пример полиморфизма

  • (также называемый динамическим связыванием, или поздним связыванием, или связыванием во время выполнения), в

  • Если бы не было полиморфизма и позднего связывания, то эта же программа выглядела бы примерно так: 1 2 3 4

  • Новый документ (1). Концепция оопобъектноориентированноепрограммирование


    Скачать 469.07 Kb.
    НазваниеКонцепция оопобъектноориентированноепрограммирование
    Дата27.09.2022
    Размер469.07 Kb.
    Формат файлаpdf
    Имя файлаНовый документ (1).pdf
    ТипДокументы
    #700569
    страница1 из 4
      1   2   3   4

    ООП
    Концепция ООП
    Объектно-ориентированное
    программирование:
    парадигма программирования,
    в которой главной идеей являются понятия объектов и
    классов.
    ООП возникло в результате развития идей процедурного программирования, где данные и функции (методы) их обработки формально не связаны.
    Инкапсуляция
    Инкапсуляция
    - свойство системы,
    позволяющее объединить данные и методы, а
    так же скрыть детали реализации от пользователя.
    Инкапсуляция
    - один из главных принципов
    ООП,
    поэтому и не удивительно, что в
    Java предлагается свое решение этой проблемы.
    Всякий раз, когда подклассу требуется сослаться на его непосредственный суперкласс,
    это можно сделать с помощью ключевого слова super.
    У
    ключевого слова super имеются две общие формы.
    Первая форма служит для вызова конструктора суперкласса,
    вторая
    - для обращения к
    члену суперкласса,
    скрываемому членом подкласса.

    Вызов конструкторов суперкласса с помощью ключевого слова super
    Из подкласса можно вызывать конструктор, определенный в его суперклассе,
    используя следующую форму ключевого слова super:
    super ( список _ аргументов) ;
    где список_
    аргументов определяет любые аргументы,
    требующиеся конструктору в суперклассе.
    Вызов метода supe r () всегда должен быть первым оператором,выполняемым в
    конструкторе подкласса.
    Другое применение ключевого
    слова super
    Вторая форма ключевого слова super действует подобно ключевому слову this,
    за исключением того, что ссылка всегда делается на суперкласс того подкласса,
    в котором используется это ключевое слово.
    В общем виде эта форма применения ключевого слова super выглядит следующим образом:
    suреr . член где член может быть методом или переменной экземпляра.
    Вторая форма применения ключевого слова super наиболее пригодна в
    тех случаях, когда имена членов
    подкласса скрывают члены суперкласса с
    такими же именами.
    Под инкапсуляцией подразумевается сокрытие пол внутри объекта с целью защиты данных от внешнего,
    бесконтрольного изменения со стороны других объектов.
    Доступ к данным (полям) предоставляется посредством публичных методов (геттеров/сеттеров). Это защитный барьер позволяет хранить информацию в безопасности внутри объекта.
    Принцип работы инкапсуляции
    Инкапсуляция позволяет нам пользоваться возможностями класса без создания угрозы безопасности данных за счет ограничения прямого доступа к его полям. Также она позволяет изменять код классов не создавая проблем их пользователям
    (другим классам). В Java данный принцип достигается за счет использования ключевого слова
    private
    public class
    Car {
    private String carBrand;
    public void setCarBrand(String carBrand)
    {
    this
    .carBrand =
    carBrand;
    }
    }
    Наследование
    Наследование
    (отношение
    «является», is a relationship) - свойство системы,
    позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью.
    Одним из основополагающих принципов объектно-ориентированного программирования является наследование, поскольку оно позволяет создавать иерархические классификации. Используя наследование,
    можно создать класс, который
    определяет характеристики, общие для набора связанных элементов. Затем этот общий класс может наследоваться другими, более специализированными классами, каждый из которых будет добавлять свои особые характеристики.
    В терминологии Jаvа наследуемый класс называется суперклассом, а наследующий класс - под КЛассом.
    Следовательно, подкласс - это специализированная версия суперкласса.
    Он наследует все члены, определенные в суперклассе,
    добавляя к ним собственные, особые элементы.
    Для каждого создаваемого подкласса можно указать только один суперкласс.
    В Java не поддерживается наследование нескольких суперклассов в одном подклассе. Как отмечалось ранее,
    можно создать иерархию наследования, в которой один подкласс становится суперклассом другого подкласса.
    Но ни один из классов не может стать суперклассом для самого себя.
    Несмотря на то что подкласс включает в себя все члены своего суперкласса, он не может иметь доступ к тем членам супер класса, которые объявлены как private.
    Помните! Член класса, который объявлен закрытым,
    остается закрытым в пределах своего класса. Он недоступен для любого кода за пределами его класса , в том числе для подклассов.
    Это особая функциональность в
    объектно-ориентированных языках программирования,
    которая позволяет описывать новые классы на основе уже существующих.
    При этом поля и
    методы
    класса-предка становятся доступны и
    классам-наследникам. Данная фича делает классы более чистыми и понятным за счет устранения дублирования программного кода.
    Принцип работы наследования
    Наследование — еще одна важная концепция ООП,
    которая позволяет сэкономить время на написании кода. Возможности наследования раскрываются в том,
    что новому классу передаются свойства и методы уже описанного ранее класса. Класс, который наследуется называется дочерним (или подклассом). Класс, от которого наследуется новый класс — называется родительским,
    предком и
    т.
    д.
    В
    языке программирования Java используется ключевое слово
    extends
    для того, чтобы указать на класс-предок.
    public class
    Car {

    ……
    }
    public class
    PassengerCar extends
    Car {
    ……
    }
    public class
    Truck extends
    Car {
    ……
    }
    Полиморфизм
    Полиморфизм - свойство системы использовать объекты с
    одинаковым интерфейсом без информации о
    типе и
    внутренней структуре объекта.
    Данный принцип позволяет программистам использовать одни и те же термины для описания различного
    поведения, зависящего от контекста. Одной из форм полиморфизма в Java является переопределение метода,
    когда различные формы поведения определяются объектом из которого данный метод был вызван. Другой формой полиморфизма является перегрузка метода, когда его поведение определяется набором передаваемых в метод аргументов.
    Принцип работы полиморфизма
    Полиморфизм предоставляет возможность единообразно обрабатывать объекты с различной реализацией при условии наличия у них общего интерфейса или класса.
    По-простому: способность вызывать нужные методы у объектов, имеющие разные типы (но находящиеся в одной иерархии). При этом происходит автоматический выбор нужного метода в зависимости от типа объекта.
    Рассмотрим примеры полиморфизма в
    Java:
    переопределение и перегрузка методов.
    В случае с переопределением метода, дочерний класс,
    используя концепцию полиморфизма, может изменить
    (переопределить)
    поведение метода родительского класса.
    Это позволяет программисту по разному использовать один и тот же метод, определяя поведение из контекста вызова (вызывается метод из класса предка или класса наследника).

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

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

    Следовательно,
    завершенное поле должно быть инициализировано во время его объявления..
    Значение такому полю можно присвоить и
    в пределах конструктора, но первый подход более распространен. Ниже приведен ряд примеров объявления завершенных полей final int FILE_NEW = 1;
    final int FILE_ OPEN = 2;
    final int FILE_ SAVE = З;
    final int FILE_ SAVEAS = 4;
    final int FILE_QUIT = 5;
    Теперь во всех последующих частях программы можно
    пользоваться полем
    FILE _ OPEN и прочими полями таким образом, как если бы они были константами,
    без риска изменить их значения.
    В практике программирования на java идентификаторы всех завершенных полей принято обозначать прописными буквами,
    как в приведенном выше примере.
    Кроме полей, объявленными как final могут быть параметры метода и
    локальные переменные.
    Объявление параметра как final препятствует его изменению в пределах метода, тогда как аналогичное объявление
    локальной переменной - присвоению ей значения больше одного раза.
    Ключевое слово final можно указывать и
    в объявлении методов, но в этом случае оно имеет совсем иное назначение,
    чем в
    переменных.
    Это дополнительное применение ключевого слова final более подробно описано в следующей главе,
    посвященной наследованию.
    Ключевое слово final в
    сочетании с
    наследованием
    Ключевое слово final можно использовать тремя способами.
    Первый способ служит для
    создания эквивалента именованной константы. Такое применение ключевого слова final было описано в предыдущей главе. А два других способа его применения относятся к
    наследованию.
    Рассмотрим их подробнее.
    Предотвращение переопределения с помощью ключевого слова final
    Несмотря на то что переопределение методов является одним из самых эффективных языковых средств
    Java,
    иногда его желательно избегать.
    Чтобы запретить переопределение метода,
    в
    начале его объявления следует указать ключевое слово final.
    Методы, объявленные как final,
    переопределяться не могут.
    Иногда методы, объявленные как final , могут способствовать увеличению производительности программы. Компилятор вправе встраивать вызовы этих методов,
    поскольку ему известно,
    что они не будут переопределены в
    подклассе.Нередко при вызове небольшого завершенного метода компилятор Java может встраивать байт-код для подпрограммы непосредственно в
    скомпилированный код вызывающего метода, тем
    самым снижая издержки на вызов метода.
    Такая возможность встраивания вызовов присуща только завершенным методам.
    Как правило, вызовы методов разрешаются в Java динамически во время выполнения.
    Такой способ называется поздним связыванием.
    Но поскольку завершенные методы не могут быть переопределены, их вызовы могут быть разрешены во время компиляции.
    И
    такой способ называется ранним связыванием.
    Предотвращения наследования с помощью ключевого слова final
    Иногда требуется предотвратить наследование класса. Для этого в начале объявления класса
    следует указать ключевое слово final.
    Объявление класса завершенным неявно делает завершенными и все его методы.
    Нетрудно догадаться,
    что одновременное объявление класса как abstract и
    final недопустимо,
    поскольку абстрактный класс принципиально является незавершенным и
    только его подклассы предоставляют полную реализацию методов.
    К переменным:
    final double
    PI
    =
    3.14;
    - константы
    К методом:
    final void grow(){}
    - запрещено переопределение
    метода
    К классам:
    final class
    A{}
    - запрещено наследование
    Модификатор static
    Модификатор static
    (единственный)
    применяется к
    методам,
    переменным и
    логическим блокам.
    К методам:
    static void grow(){}
    - вызывать функцию можно обращаться через имя класса
    Man.grow();
    К переменным:
    static int counter;
    - переменная общая для всех объектов

    1. Назовите принципы ООП и расскажите о каждом.
    Объе́ктно-ориенти́рованное программи́рование
    (ООП)

    это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.
    Основные принципы ООП: абстракция, инкапсуляция, наследование, полиморфизм.
    Абстракция — означает выделение значимой информации и исключение из рассмотрения незначимой. С точки зрения программирования это правильное разделение программы на объекты.
    Абстракция позволяет отобрать главные характеристики и
    опустить второстепенные.
    Пример: описание должностей в компании. Здесь название должности значимая информация, а описание обязанностей у каждой должности это второстепенная информация. К примеру главной характеристикой для «директор» будет то, что это должность чем-то управляет, а чем именно (директор по персоналу, финансовый директор,
    исполнительный директор) это уже второстепенная информация.
    Инкапсуляция — свойство системы, позволяющее объединить данные и методы,
    работающие с ними, в классе. Для Java корректно будет говорить, что инкапсуляция это
    «сокрытие реализации». Пример из жизни — пульт от телевизора. Мы нажимаем кнопочку
    «увеличить громкость» и она увеличивается, но в этот момент происходят десятки процессов, которые скрыты от нас. Для Java: можно создать класс с 10 методами, например вычисляющие площадь сложной фигуры, но сделать из них 9 private. 10 й метод будет называться «вычислить Площадь()» и объявлен public, а в нем уже будут вызываться
    необходимые скрытые от пользователя методы. Именно его и будет вызывать пользователь.
    Наследование — свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование,
    называется базовым,
    родительским или суперклассом. Новый класс — потомком, наследником, дочерним или производным классом.
    Полиморфизм — свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Пример (чуть переделанный) из
    Thinking in Java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public interface Shape {
    void draw();
    void erase();
    }
    public class Circle implements Shape {
    public void draw() {
    System.out.println("Circle.draw()");
    }
    }
    public class Triangle implements Shape {
    public void draw() {
    System.out.println("Triangle.draw()");
    }
    }
    public class TestPol {
    public static void main(String[] args) {
    Shape shape1 = new Circle();
    Shape shape2 = new Triangle();

    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    testPoly(shape1);
    testPoly(shape2);
    }
    public static void testPoly(Shape shape) {
    shape.draw();
    }
    }
    //Вывод в консоль:
    //Circle.draw()
    //Triangle.draw()
    Есть общий интерфейс «Фигура» и две его реализации «Треугольник» и «Круг». У
    каждого есть метод «нарисовать». Благодаря полиморфизму нам нет нужды писать
    отдельный метод для каждой из множества фигур, чтобы вызвать метод
    «нарисовать». Вызов полиморфного метода позволяет одному типу выразить свое
    отличие от другого, сходного типа, хотя они и происходят от одного базового типа.
    Это отличие выражается различным действием методов, вызываемых через
    базовый класс (или интерфейс).
    Здесь
    приведен
    пример
    полиморфизма
    (также
    называемый
    динамическим
    связыванием, или поздним связыванием, или связыванием во время выполнения), в
    котором продемонстрировано как во время выполнения программы будет выполнен
    тот метод, который принадлежит передаваемому объекту.
    Если бы не было полиморфизма и позднего связывания, то эта же программа
    выглядела бы примерно так:
    1
    2
    3
    4
    public static void testPolyCircle(Circle circle) {
    circle.draw();
    }
    public static void testPolyTriangle(Triangle triangle) {

    5
    6
    triangle.draw();
    }
    Т.е. для каждого класса (фигуры) мы бы писали отдельный метод. Здесь их два, а
    если фигур (классов) сотни?
    2. Дайте определение понятию “класс”.
    Класс – это шаблон, описывающий общие свойства группы объектов. Этими
    свойствами могут быть как характеристики объектов (размер, вес, цвет и т.п.), так и
    поведения, роли и т.п.
    3. Что такое поле/атрибут класса?
    Поле (атрибут) класса — это характеристика объекта. Например для фигуры это
    может быть название, площадь, периметр.
    1
    2
    3
    4
    5
    6
      1   2   3   4


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