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

  • Оглавление Постановка задачи

  • Описание используемых структур

  • Рис. 1. Добавление элемента 1 в пустую очередь

  • Рис. 2. Удаление элемента 1 из начала очереди

  • Рис. 4. Добавление нового элемента «2» перед заданным элементом «1» в массив-список

  • Описание разработанных классов

  • Курсовая работа коммунальная компания. Комунальные услуги упр компании. Разработка объектной программы для задачи Учета оплаты коммунальных услуг в управляющей компании


    Скачать 192.38 Kb.
    НазваниеРазработка объектной программы для задачи Учета оплаты коммунальных услуг в управляющей компании
    АнкорКурсовая работа коммунальная компания
    Дата15.04.2022
    Размер192.38 Kb.
    Формат файлаdocx
    Имя файлаКомунальные услуги упр компании.docx
    ТипКурсовая
    #476802
    страница1 из 3
      1   2   3

    УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

    «УНИВЕРСИТЕТ УПРАВЛЕНИЯ «ТИСБИ»

    Факультет информационных технологий

    Кафедра информационных технологий
    Курсовая работа

    по дисциплине «Программная инженерия»

    на тему: Разработка объектной программы для задачи «Учета оплаты коммунальных услуг в управляющей компании»


    Выполнил: студент гр. ПИ-922

    Даниличев В.Э.

    Проверил: ст. преподаватель

    Якунина Е.А
    Казань 2021
    Оглавление





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

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

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

    Разработка выполняется с учетом следующих требований:

    - имена классов, свойств и методов должны носить содержательный смысл и соответствовать информационной задаче;

    - обязательное соблюдение принципа инкапсуляции - использование в классах только закрытых свойств и реализация необходимого набора методов доступа;

    - наличие двух методов для сохранения всей объектной структуры во внешнем файле с обратной загрузкой, при этом стандартные механизмы сериализации разрешается использовать только как дополнение к самостоятельно реализованным методам;

    - тестовое оконное приложение должно обладать удобным пользовательским интерфейсом с контролем вводимых данных и отображением текущего состояния объектной структуры с помощью списковых или табличных компонентов;

    - стандартные контейнеры/коллекции (включая обобщенные классы) разрешается использовать только как дополнение к самостоятельно разработанным классам;

    - Язык разработки был выбрал Pascal, а среда разработки Lazarus;
    Описание используемых структур
    Нижний уровень(адресная очередь без заголовочного элемента).

    Очередь(Queue) – это абстрактный тип данных с дисциплиной доступа к элементам «первый пришёл — первый вышел» (FIFO, англ. first in, first out). Добавление элемента (enqueue — поставить в очередь) возможно лишь в конец очереди, выборка — только из начала очереди (dequeue — убрать из очереди), при этом выбранный элемент из очереди удаляется. Эту структуру данных можно сравнить с очередью в магазине, где человек вставший первым, будет покупателем первым.

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

    Рассмотрим динамическую реализацию адресной очереди без заголовка. Основные принципы такой реализации:

    - Сначала объявляем два указателя на начало и конец очереди.

    -Далее объявляем указатель на следующий элемент в очереди.

    -Инициализируем пустую очередь

    First = null;

    Last = null;

    Count = 0;

    Основные операции с очередью:

    -Удаление элемента;

    -Добавление элемента;

    Алгоритм добавления нового элемента в очередь:

    1.Проверка очереди на пустоту;

    2.Если, очередь пуста, то first=last записываем элемент;

    3.Если в очереди есть элемент, то записываем в конец очереди;


    First = null

    1
    4.Увеличить счетчик числа элементов в очереди;


    Last = null



    Count = 0



    First = 1



    Last = 1


    Count ++

    Рис. 1. Добавление элемента 1 в пустую очередь
    Алгоритм удаления элемента и очереди:

    1. Проверка возможности удаления;

    2. Изменение указателя First на адрес второго элемента, который становится первым; этот адрес извлекается из адресного поля удаляемого элемента;

    3. Уменьшить счетчик числа элементов в очереди;

    First = first.next

    1 2 3




    Count --


    Рис. 2. Удаление элемента 1 из начала очереди
    Верхний уровень (структура данных в виде упорядоченного списка на основе массива):

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

    Основные операции со списком:

    1)Добавление элемента в заданное место;

    2)Удаление заданного элемента;

    3)Поиск в списке заданного элемента;

    4)Проход по списку с выполнением заданных действий;

    Основные принципы работы со списком:

    1)Элементы списка располагаются в последовательных ячейках массива строго друг за другом;

    2)Операции добавления и удаления требуют выполнения сдвига содержимого ячеек массива;

    3)Для оправления списком-массивом достаточно одной переменной целого типа, определяющей текущее число элементов в списке;

    4)Все операции делаются на основе стандартных действий с массивом;

    Рассмотрим статическую реализацию упорядоченного списка на основе массива. Основные принципы такой реализации:

    - Объявляем массив с элементами необходимого типа;

    - Инициализируем пустой список;

    Size = 5 (Размер массива);

    Count = 0 (счётчик);

    Стандартные операции над упорядоченными списками:

    -Добавление нового элемента;

    - Удаление заданного элемента;

    - Поиск в списке заданного элемента;
    Особая ситуация добавления самого первого элемента:

    1. Проверка на пустоту массива;

    2. Добавить элемент в список-массив по индексу count[0];

    3. Увеличить счетчик числа элементов в списке(count+1);


    Count = 0


    Count ++


    1


    Рис. 3. Добавление первого элемента «1» в пустой массив-список
    Алгоритм добавления нового элемента до заданного:

    1. Проверить возможность добавления (наличие свободных ячеек массива);

    2. Поиск заданного элемента;

    3. Если заданный элемент найден, сдвигаем элементы(при необходимости);

    4. Заносим новый элемент на необходимое место;

      1

    5. Увеличить счетчик числа элементов в списке(count+1);


    Count = 1


    1





    2 1


    Count ++

    Рис. 4. Добавление нового элемента «2» перед заданным элементом «1» в массив-список
    Алгоритм добавления нового элемента после заданного:

    1. Проверить возможность добавления;

    2. Поиск заданного элемента;

    3. Если заданный элемент найден в ячейке i, то для вставки нового элемента в следующую за ним ячейку, надо все последующие элементы сдвинуть вправо на одну ячейку;

    4. В ячейку i+1 заносится новый элемен;

      1 2 3

    5. Увеличить счетчик числа элементов в списке(count+1);


    Count = 3



    1 2 3


    Count ++


    1 2 4 3

    Рис. 5. Добавление нового элемента «4» после заданного элемента «2» в массив-список

    Алгоритм удаления заданного элемента:

    1. Проверка наличия элементов в списке;

    2. Если список не пустой – поиск удаляемого элемента;

    3. Если удаляемый элемент найден в ячейке i, то он извлекается из этой ячейки и обрабатывается необходимым образом;

    4. Для сохранения естественного порядка элементов необходимо сдвинуть все элементы с i+1 до последнего влево на одну ячейку;

      1 2 4 3

    5. Уменьшить счетчик числа элементов в списке(count-1)


    Count = 4

    1 2 4 3

    1 2 3



    Count --

    1 2 3


    Рис. 6. Удаление элемента «4» из массива-списка

    Описание объектного подхода

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

    Объект можно представить как независимый электроприбор у вас на кухне. Чайник кипятит воду, плита греет, блендер взбивает, мясорубка делает фарш. Внутри каждого устройства куча всего: моторы, контроллеры, кнопки, пружины, предохранители — но вы о них не думаете. Вы нажимаете кнопки на панели каждого прибора, и он делает то, что от него ожидается. И благодаря совместной работе этих приборов у вас получается ужин.

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

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


    Языки, реализующие элементы объектной модели, называются объектно-ориентированными языками, такими как Java, C ++, C # и Python.

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

    Инкапсуляция – сокрытие поведения объекта внутри него. Объекту «водитель» не нужно знать, что происходит в объекте «машина», чтобы она ехала. Это ключевой принцип ООП.

    Наследование. Есть объекты «человек» и «водитель». У них есть явно что-то общее. Наследование позволяет выделить это общее в один объект (в данном случае более общим будет человек), а водителя — определить как человека, но с дополнительными свойствами и/или поведением. Например, у водителя есть водительские права, а у человека их может не быть.

    Полиморфизм – это переопределение поведения. Можно снова рассмотреть «человека» и «водителя», но теперь добавить «пешехода». Человек умеет как-то передвигаться, но как именно, зависит от того, водитель он или пешеход. То есть у пешехода и водителя схожее поведение, но реализованное по-разному: один перемещается ногами, другой – на машине.

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

    Деструктор – это такой метод, который отвечает за уничтожение объекта, т.е. освобождение памяти, выделенной объекту.

    Для доступа к свойству определяется пара методов - get-метод для получения значения свойства и set-метод для установки значения. Это довольно распространенная концепция, которая нашла свое применение, например, в Java, где для управления доступом к приватным переменным создается пара методов - get/set, или в C#, где для доступа к приватным переменным создается свойство с двумя методами get/set.

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

    Объявление класса состоит из следующих частей:

    • Заголовок класса

    • Модификаторы

    • Название класса

    • Суперкласс (имя родительского класса, если доступно)

    • Реализованные интерфейсы (если есть)

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

    • Тело класса, содержащие перечень свойств, заголовки методов.

    В классах допускается объявлять так называемые абстрактные методы, у которых есть только заголовок (имя и параметры), но нет программной реализации. Целесообразность использования таких конструкций будет обоснована при рассмотрении принципа наследовании.

    Контейнер – объект, позволяющий хранить и обрабатывать набор некоторых объектов. Возможные варианты реализации контейнера:

    1. на основе массива

    2. на основе динамических списков разных типов

    3. на основе поисковых деревьев

    4. на основе хеш-таблиц

    ООП позволяет упростить сложные объекты, составляя их из более маленьких и простых, поэтому над программой могут работать сотни разработчиков, каждый из которых занят своим блоком. Большинство современных языков программирования — объектно-ориентированные, и, однажды поняв суть, можно освоить сразу несколько языков. Главное, о чем не стоит забывать: ООП — это не единственная парадигма. У нее есть свои плюсы и минусы, для каких-то задач она подходит, для каких-то — нет. Например, ООП не даст особых преимуществ, если писать короткие функции и простые скрипты. Однако в больших проектах неразделенный на отдельные сущности код быстро превратится в «лапшу» и перестанет читаться, и ООП здесь сильно упростит работу.

    Описание разработанных классов

    В ходе решения поставленной задачи, было разработано три класса:

    1. YpravKomp;(класс управляющей компании)

    2. Dom;(класс дома)

    3. Kvartira;(класс квартиры)

    Ниже приведено формальное описание каждого разработанного класса.
      1   2   3


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