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

  • 2.Какие преимущества у ООП

  • 3.Какие недостатки у ООП

  • 4.Назовите основные принципы ООП.

  • 5.Что такое инкапсуляция (с примером)

  • 6.Что такое наследование (с примером)

  • 7.Что такое полиморфизм (с примером)

  • 8.Что такое ассоциация, агрегация и композиция

  • 9.Расскажите про раннее и позднее связывание.

  • [2*JAVA] 1.Какая основная идея языка

  • 2.За счет чего обеспечивается кроссплатформенность

  • 3.Какие преимущества у java

  • 4.Какие недостатки у Java Медленная работа из-за интерпретатора. Требует больше памяти и вычислительных ресурсов. Наличие легаси-классов.5.Что такое JDK Что в него входит

  • 6.Что такое JRE что в него входит

  • _Конспект CORE-1. Core1 1ооп Что такое ооп


    Скачать 73.05 Kb.
    НазваниеCore1 1ооп Что такое ооп
    Анкор_Конспект CORE-1
    Дата12.12.2020
    Размер73.05 Kb.
    Формат файлаdocx
    Имя файла_Конспект CORE-1.docx
    ТипПрограмма
    #159790
    страница1 из 5
      1   2   3   4   5

    CORE-1
    [1*ООП]
    1.Что такое ООП?

    Методология программирования, основанная на представлении программы в виде совокупности

    объектов, каждый из которых является экземпляром определенного класса, а классы

    образуют иерархию наследования.

    ● объектно-ориентированное программирование использует в качестве основных логических конструктивных элементов объекты, а не алгоритмы;

    ● каждый объект является экземпляром определенного класса

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

    сообщениями. Объекты могут обладать состоянием, единственный способ изменить

    состояние объекта - послать ему сообщение, в ответ на которое, объект может изменить

    собственное состояние.
    2.Какие преимущества у ООП?

    Основная задача ООП - сделать сложный код проще для решения сложных абстрагированных комплексных задач. Для этого программу разбивают на независимые блоки, которые мы называем объектами. Визуально код становится проще, и его легче читать (разбито на объекты). Меньше одинакового кода (решается наследованием). Сложные программы пишутся проще (разбиение на блоки). Увеличивается скорость написание (компонентный подход).
    3.Какие недостатки у ООП?

    Сложно понять и начать работать (сложнее функционального). Требует больше памяти для работы (объекты – это интерфейсы, методы и многое другое). Производительность кода может быть ниже (из-за сложности реализации).
    4.Назовите основные принципы ООП.

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

    Абстракция — выделение главных, наиболее значимых характеристик предмета и наоборот — отбрасывание второстепенных, незначительных. Как в рисунке или общей схеме.
    5.Что такое инкапсуляция? (с примером)

    Инкапсуляция – наличие одновременной целостности данных и методов внутри объекта. Ограничение доступа к данным и возможностям их изменения. Каждый объект устроен так, что нужные для него данные находятся внутри этого объекта, а не где-то снаружи в программе. Например, если есть объект «Пользователь», то в нём будут все данные о пользователе: имя, адрес, и остальное. И в нём же методы «Проверить адрес» или «Подписать на рассылку». При этом детали реализации скрыты от потребителя метода – есть метод, а его конкретная реализация лежит на создателе метода. Реализуются с помощью геттера и сеттера.
    6.Что такое наследование? (с примером)

    Наследование — способность к клонированию объектов по единому шаблону. Механизм описания нового класса, на основе существующего (родительского). ООП позволяет создавать много объектов по образу и подобию другого объекта. Это позволяет не копипастить код, один раз нормально написать и много раз использовать.

    Может быть некий идеальный объект «Пользователь»: в нём вы прописываете всё, что может происходить с пользователем. Могут быть свойства: имя, возраст, адрес, номер карты. И могут быть методы «Дать скидку», «Проверить заказ», «Найти заказы», «Позвонить».

    На основе этого идеального пользователя можно создать реального «Покупателя Ивана». У него при создании будут все свойства и методы, которые задали у идеального покупателя, плюс могут быть какие-то свои, по необходимости.
    7.Что такое полиморфизм? (с примером)

    Различная реализация методов внутри классов при сохранении единого интерфейса обращения. Возможность работать с несколькими типами так, будто это один и тот же тип. В ООП важно, чтобы все объекты общались друг с другом на понятном им языке. И если у разных объектов есть метод «Удалить», то он должен делать именно это и писаться везде одинаково. Нельзя, что­бы у одного объекта это было «Удалить», а у другого «Стереть».

    При этом внутри объекта методы могут быть реализованы по-разному. Например, удалить товар — это выдать предупреждение, а потом пометить товар в базе данных как удалённый. А удалить пользователя — это отменить его покупки, отписать от рассылки и заархивировать историю его покупок. События разные, но для программиста это неважно. У него просто есть метод «Удалить()», и он ему доверяет.

    Такой подход позволяет программировать каждый модуль независимо от остальных. Главное — заранее продумать, как модули будут общаться друг с другом и по каким правилам. При таком подходе можно улучшить работу одного модуля, не затрагивая остальные — для всей программы неважно, что внутри каждого блока, если правила работы с ним остались прежними. @Override передача объекта по ссылке для объекта-предка.
    8.Что такое ассоциация, агрегация и композиция?

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

    Наследование (иногда этот тип еще называют генерализацией)

    Реализация (это тип отношений базируется на интерфейсах. То есть создается интерфейсы, которые основной класс должен реализовать.)

    Композиция, агрегация и ассоциация эти три понятия очень похожи друг на друга. Все они означают что внутри одного объекта будет существовать другой объект.

    У нас есть класс комната и есть два других класса мебель и стена. Мы можем сказать, что у комнаты будет какая та мебель и какие-то стены. То есть объект комната может использоваться объекты стены и мебель по мере необходимости. Но есть разница в отношения комната — стены и комната — мебель. Разница в том, что стены никогда не выйдут из объекта комната. Стены не могут существовать вне комнаты. То есть стена всегда будет создаваться внутри объекта комната. Такая связь называется композиция. И эта связь будет жесткой.

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

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

    Ассоциация_(1) - такой тип связи, при котором объекты будут ссылаться друг на друга. При этом они остаются полностью независимыми друг от друга.

    Агрегация_(2) - тип отношений, когда один объект является частью другого. Агрегация образует слабую связь между объектами. Все зависимые классы инициализируются вне основного объекта.

    При агрегации у нас получается более прочная связь, чем при ассоциации.

    Композиция (3) - тип отношений при котором один объект может принадлежать только другому объекту и никому другому. При композиции образуется сильная связь между объектами. При таком типе отношений основной объект полностью обеспечивает жизненный цикл объектов от которых он зависит. Машина и двигатель. То есть в ассоциации и агрегации предполагалось что эти два класса создается независимо, а потом связываются ссылками, в композиции они создается вместе в момент вызова конструктора.
    9.Расскажите про раннее и позднее связывание.

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

    Существует два типа связывания методов в языке Java: ранее связывание (его ещё называют статическим) и позднее (соответственно, динамическое) связывание. Вызов метода в Java означает, что этот метод привязывается к конкретному коду или в момент компиляции (ранее статическое), происходит во время компиляции, то есть код «знает», какой метод вызывать после компиляции исходного кода. Или во время выполнения(позднее), при запуске программы после запуска программы виртуальной машиной и создании объектов. Поскольку это происходит на поздней стадии жизненного цикла программы, то называется в языке Java поздним связыванием (late binding).

    Фундаментальное различие между статическим и динамическим связыванием в Java состоит в том, что первое происходит рано, во время компиляции на основе типа ссылочной переменной, а второе – позднее, во время выполнения, с использованием конкретных объектов.

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

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

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

    Приватные, статические и final-методы связываются при помощи статического связывания, а виртуальные – динамического. Аналогично, лучший пример статического связывания – перегрузка методов, а переопределение – динамического.
    10.SOLID

    Пять основных принципов дизайна классов (S.O.L.I.D.) в Java:
    Single Responsibility Principle (Принцип единственной ответственности).

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

    Принцип единственной обязанности подразумевает, что три аспекта одной и той же проблемы на самом деле — три разные обязанности. А значит, должны находиться в разных классах или модулях. Объединение нескольких сущностей, которые могут меняться в разное время и по разным причинам, считается плохим проектным решением.
    Open Closed Principle (Принцип открытости/закрытости).

    Программные сущности (классы, модули, функции и т.п.) должны быть открыты для расширения, но закрыты для изменения.

    Это означает, что должна быть возможность изменять внешнее поведение класса, не внося физические изменения в сам класс. Следуя этому принципу, классы разрабатываются так, чтобы для подстройки класса к конкретным условиям применения было достаточно расширить его и переопределить некоторые функции.
    Liskov’s Substitution Principle (Принцип подстановки Барбары Лисков).

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

    Это означает, что класс, разработанный путем расширения на основании базового класса, должен переопределять его методы так, чтобы не нарушалась функциональность с точки зрения клиента. То есть, если разработчик расширяет ваш класс и использует его в приложении, он не должен изменять ожидаемое поведение переопределенных методов.
    Interface Segregation Principle (Принципразделенияинтерфейса).

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

    Слишком «толстые» интерфейсы необходимо разделять на более мелкие и специфические, чтобы клиенты мелких интерфейсов знали только о методах, необходимых в работе. В итоге, при изменении метода интерфейса не должны меняться клиенты, которые этот метод не используют.
    Dependency Inversion Principle (Принципинверсиизависимостей).

    Зависимости внутри системы строятся на основе абстракций.

    Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

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

    Классическое применение этого принципа — Spring framework. В рамках Spring framework все модули выполнены в виде отдельных компонентов, которые могут работать вместе.

    Это достигнуто за счет зависимости закрытых и открытых принципов. Все модули предоставляют доступ только к абстракции, которая может использоваться в другом модуле.
    [2*JAVA]
    1.Какая основная идея языка?

    Платформо-независимость, Независимость от оборудования и операционной системы. Написано один раз – работает везде.
    2.За счет чего обеспечивается кроссплатформенность?

    За счет разделения функций транслятора байт-кода (javac) и интерпретатора в машинный код (JVM). Программы на Java транслируются в байт-код Java, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

    Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду.

    Интерпретация — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения).

    Чистая интерпретация байт-кода является долгим процессом и делает язык java медленным в сравнении с конкурентами. Дабы избежать этого, был введен механизм, позволяющий ускорить интерпретацию байт-кода виртуальной машиной. Этот механизм называется Just-in-time компиляцией (JIC). Если в программе присутствуют части кода, которые выполняются много раз, то их можно скомпилировать один раз в машинный код, чтобы в будущем ускорить их выполнение. После компиляции такой части программы в машинный код, при каждом следующем вызове этой части программы виртуальная машина будет сразу выполнять скомпилированный машинный код.
    3.Какие преимущества у java?

    Платформо-независимость, строгая типизация с объектно-ориентированностью для разработки сложных комплексных систем, гибкая система безопасности. Код выполняется в виртуальной машине и её контролируется. Необходимо писать в стиле ООП. Написано один раз – работает везде.
    4.Какие недостатки у Java?

    Медленная работа из-за интерпретатора. Требует больше памяти и вычислительных ресурсов. Наличие легаси-классов.
    5.Что такое JDK? Что в него входит?

    Комплект разработчика приложений: компилятор Java (javac), стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE).

    JDK требуется JRE, потому что запуск программ является неотъемлемой частью их разработки.
    Java Development Kit (JDK) является одним из трех основных пакетов, используемых в программировании на языке Java. К ним также относятся JVM (Java Virtual Machine) и JRE (Java Runtime Environment). JDK = JRE+DevTools. В дополнение к JRE, который является средой, используемой для запуска Java-приложений, каждый JDK содержит компилятор Java (javac). Компилятор — это программа, способная принимать исходные файлы с расширением .java, которые являются обычным текстом, и превращать их в исполняемые файлы с расширением .class
    JVM - это часть платформы Java, которая исполняет программы;

    JRE - это элемент Java, расположенный на диске, создающий и запускающий JVM;

    JDK - позволяет разработчикам создавать Java-программы, которые могут выполняться и запускаться посредством JVM и JRE;

    JDK представляет собой пакет инструментов для разработки программного обеспечения, тогда как JRE представляет собой пакет инструментов для запуска Java-кода.
    6.Что такое JRE? что в него входит?

    Минимальная реализация виртуальной машины, необходимая для исполнения Java-приложений, без компилятора и других средств разработки. Состоит из виртуальной машины — Java Virtual Machine(JVM) — и библиотеки Java-классов.

    JRE представляет собой пакет инструментов для запуска Java-кода. JRE - это элемент Java, расположенный на диске, создающий и запускающий JVM. JRE может использоваться, как отдельный компонент для простого запуска Java-программ, но при этом является частью JDK.

    JDK требуется JRE, потому что запуск программ является неотъемлемой частью их разработки.
    7.Что такое JVM?

    По существу, JVM это интерпретатор (с JIT компиляцией, которая даёт прирост производительности). Исходный код джава не поступает интерпретатору на исполнение, он компилируется в байткод, а уже байт код интерпретируется JVM.

    JVM - это часть платформы Java, которая исполняет программы; Виртуальная машина интерпретатора байт-кода в машинный код (javac -> class) и JIT-компилятора.

    Код приложения выполняется в контейнере, в наличии защищённая среда выполнения программы, Уменьшилась до минимума возможность управления памятью программистом,

    Среду исполнения сделали кроссплатформенной, Стала использоваться рантайм (во время выполнения программы) информация для самоуправления.
    8.Что такое byte code?

    Промежуточное представление, в которое может быть переведена компьютерная программа автоматическими средствами. Байт-код — это компактное представление программы, уже прошедшей синтаксический и семантический анализ. В нём в явном виде закодированы типы, области видимости и другие конструкции. С технической точки зрения байт-код представляет собой машинно-независимый код низкого уровня, генерируемый транслятором из исходного кода (.class)

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

    Конечная цель байткода иметь такой формат представления данных и управляющей информации, чтобы быть эффективно исполненным JVM.

    Всё что компилируется в байткод, может быть выполнено на JVM. Примеры таких языков — Scala, Clojure, Kotlin и т.д.
      1   2   3   4   5


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