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

  • 2. Два принципа инкапсуляции. Инкапсуляция

  • геттер

  • 4. Что такое полиморфизм Как он связан с ранним и поздним связыванием

  • 5. Опишите разницу между интерфейсами, абстрактными классами и конкретными классами.

  • Задание 1 Объясните концепцию абстракции, и почему она важна для программной инженерии


    Скачать 19.01 Kb.
    НазваниеЗадание 1 Объясните концепцию абстракции, и почему она важна для программной инженерии
    Дата16.06.2021
    Размер19.01 Kb.
    Формат файлаdocx
    Имя файла14.06.2021.docx
    ТипОтчет
    #218012

    Отчет за 14.06.2021

    Изучаемые вопросы.

    1. Классы и объекты.

    2. Инкапсуляция данных.

    3. Наследование и полиморфизм.

    Задание 1

    1. Объясните концепцию абстракции, и почему она важна для программной инженерии?

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

    2. Два принципа инкапсуляции.

    Инкапсуляция - в информатике размещение в одном компоненте данных и методов, которые с ними работают. Также может означать скрытие внутренней реализации от других компонентов. Например, доступ к скрытой переменной может предоставляться не напрямую, а с помощью методов для чтения (геттер) и изменения (сеттер) её значения.

    Абстракция

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

    3. Опишите наследование в контексте ООП.

    Терминология

    В объектно-ориентированном программировании, начиная с Simula 67, абстрактные типы данных называются классами.

    Суперкласс (англ. superclass), родительский класс (англ. parentclass), предок, родитель или надкласс — класс, производящий наследование в подклассах, т. е. класс, от которого наследуются другие классы. Суперклассом может быть подкласс, базовый класс, абстрактный класс и интерфейс.

    Подкласс (англ. subclass), производный класс (англ. derivedclass), дочерний класс (англ. childclass), класс потомок, класс наследник или класс-реализатор — класс, наследуемый от суперкласса или интерфейса, т. е. класс определённый через наследование от другого класса или нескольких таких классов. Подклассом может быть суперкласс.

    Базовый класс (англ. baseclass) — это класс, находящийся на вершине иерархии наследования классов и в основании дерева подклассов, т. е. не являющийся подклассом и не имеющий наследований от других суперклассов или интерфейсов. Базовым классом может быть абстрактный класс и интерфейс. Любой не базовый класс является подклассом.

    Интерфейс (англ. interface) — это структура, определяющая чистый интерфейс класса, состоящий из абстрактных методов. Интерфейсы участвуют в иерархии наследований классов и интерфейсов.

    Суперинтерфейс (англ. superinterface) или интерфейс-предок — это аналог суперкласса в иерархии наследований, т. е. это интерфейс производящий наследование в подклассах и подинтерфейсах.

    Интерфейс-потомок, интерфейс-наследник или производный интерфейс (англ. derivedinterface) — это аналог подкласса в иерархии наследований интерфейсов, т. е. это интерфейс наследуемый от одного или нескольких суперинтерфейсов.

    Базовый интерфейс — это аналог базового класса в иерархии наследований интерфейсов, т. е. это интерфейс, находящийся на вершине иерархии наследования.

    Иерархия наследования или иерархия классов — дерево, элементами которого являются классы и интерфейсы.

    4. Что такое полиморфизм? Как он связан с ранним и поздним связыванием?

    Полиморфизм — одна из трех основных парадигм ООП. Если говорить кратко, полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового. Для тех, кто не особо сведущ в ООП, это, наверно, звучит сложно. Поэтому рассмотрим применение полиморфизма на примере.

    5. Опишите разницу между интерфейсами, абстрактными классами и конкретными классами.

    Короткое различие.

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

    Интерфейс — это абстрактный класс, у которого ни один метод не реализован, все они публичные и нет переменных класса.

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

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

    В некоторых языках (С++) специального ключевого слова для обозначения интерфейсов нет.

    Можно считать, что любой интерфейс — это уже абстрактный класс, но не наоборот.

    Индивидуальное задание 2

    using System;


    namespace ConsoleApplication1

    {

    class Program

    {

    static void Main(string[] args)

    {

    House[] houses = new House[]

    {

    new House(9, 1, 4, 54),
    new House(9, 2, 5, 54),
    new House(8, 3, 2, 48),
    new House(12, 4, 3, 72),
    new House(11, 5, 5, 66),

    };
    foreach (House house in houses)

    Console.WriteLine(house.ToString());

    Console.ReadKey();

    }

    }
    class House

    {

    public int porchCount;

    public int floorCount;

    private int roomsOnFloor;

    private double meterCost;
    public int Porchs

    {

    get { return porchCount; }

    set { porchCount = value; }

    }
    public int Floors

    {

    get { return floorCount; }

    set { floorCount = value; }

    }
    public int RoomsOnFloor

    {

    get { return roomsOnFloor; }

    set { roomsOnFloor = value; }

    }
    public double Cost

    {

    get { return meterCost; }

    set { meterCost = value; }

    }
    public House()

    {

    }
    public House(int porchCount, int floorCount, int roomsOnFloor, double cost)

    {

    this.porchCount = porchCount;

    this.floorCount = floorCount;

    this.roomsOnFloor = roomsOnFloor;

    this.meterCost = cost;

    }
    public int GetRoomsCountInPorch()

    {

    return roomsOnFloor * floorCount;

    }
    public int GetRoomsCountInHouse()

    {

    return GetRoomsCountInPorch() * porchCount;

    }
    public double HouseCost()

    {

    return (double)GetRoomsCountInHouse() * Cost;

    }
    public override string ToString()

    {

    return string.Format("Уникальный номер здания: {0} \nКоличество этажей: {1} \nКоличество квартир: {2}", Floors, Porchs, Cost);

    }

    }

    }


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