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

  • Пример: Рассмотрим программу:class

  • лекция. Сборник лекций по МДК _Технология разработки программного обеспе. Курс лекций для специальности спо базовой подготовки


    Скачать 4.41 Mb.
    НазваниеКурс лекций для специальности спо базовой подготовки
    Анкорлекция
    Дата02.09.2022
    Размер4.41 Mb.
    Формат файлаdocx
    Имя файлаСборник лекций по МДК _Технология разработки программного обеспе.docx
    ТипКурс лекций
    #660044
    страница59 из 62
    1   ...   54   55   56   57   58   59   60   61   62

    Количество посылаемых методом сообщений (NMS)


    Количество сообщений, посылаемых данным методом (Number of Message-Sends-NMS) позволяет оценить степень коммуникационной сложности метода.

    Пример:

    Рассмотрим программу:

    class Edge : public View {

    Node *node1, *node2;
    void setArea(Point p1, Point p2);
    void draw(Graphics *g){

    Point c1 = node1->getCenter();

    Point c2 = node2->getCenter();

    g->drawLine(p1, p2);

    setArea(p1, p2);

    }

    };
    В этом случае:

    NMS(Edge) = 2, поскольку он вызывает метод  getCenter() класса Node, метод drawLine(p1, p2) класса Graphics.
      1. Сообщения и аргументы (MAA)


    Сообщения и аргументы (Messages And Arguments - MAA) позволяет степень коммуникационной сложности метода учитывая количество предаваемых в сообщение параметров. При подсчете количества посылаемых методом сообщений к количеству сообщений добавляется и количество передаваемых в сообщении параметров.

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

    Пример:

    Рассмотрим программу:

    class Edge : public View {

    Node *node1, *node2;
    void setArea(Point p1, Point p2);
    void draw(Graphics *g){

    Point c1 = node1->getCenter();

    Point c2 = node2->getCenter();

    g->drawLine(p1, p2);

    setArea(p1, p2);

    }

    };
    В этом случае:

    MAA(Edge) = 4, поскольку он вызывает метод  getCenter() класса Node без параметров и метод drawLine(p1, p2) класса Graphics с двумя параметрами.

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

    Пример:

    Рассмотрим программу:

    class Triangle {
    Point p1, p2, p3;

    Graphics *g;

    void draw() {
       g->drawTriangle(p1, p2, p3);
    }
    };

    class Graphics {

    Color color;

    Color getColor();

    void drawTriangle(Point p1, Point p2, Point p3) {
    }
    };
    В классе Triangle метод  draw вызывает метод drawTriangle класса Graphics с тремя параметрами. Это увеличивает его коммуникационную сложность. Если перенести метод drawTriangle в класс Triangle, то можно будет уменьшить число параметров в этом методе. 

    Ниже показана программа после повторного проектирования классов. Метод drawTriangle(Point p1, Point p2, Point p3)заменен на метод draw(Color color):

    class Triangle {

    Point p1, p2, p3;

    Graphics *g;

    void draw() {
       draw(g->getColor());
    }
    void draw(Color color) {
    }
    };

    class Graphics {
    Color color;
    Color getColor();
    };
      1. Количество абстрактных классов (NAC)


    Количество абстрактных классов (Number of Abstract Classes-NAC), число вершин в простейшей модели иерархии наследования, значение атрибута тип которых равно абстрактный. Абстрактные классы - это классы, для которых не предполагается создавать экземпляры. В языке С++ это классы, которые имеют чистые виртуальные методы. Методы абстрактных классов реализуются в потомках абстрактного класса. Абстрактные классы создаются для увеличения повторного использования их методов в классах-потомках. Метрика NAC позволяет оценить, каким образом степень повторного использования методов с помощью абстрактных классов. Метрика связана с повторным использованием программ, поскольку создание абстрактных классов способствует повторному использованию методов и уменьшением, тем самым, затрат на выявление общих понятий в прикладной области.

    В литературе приводится статистика из практики – рекомендуется иметь 10-15% абстрактных классов среди общего числа классов.
      1. 1   ...   54   55   56   57   58   59   60   61   62


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