Курсовая работа коммунальная компания. Комунальные услуги упр компании. Разработка объектной программы для задачи Учета оплаты коммунальных услуг в управляющей компании
Скачать 192.38 Kb.
|
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «УНИВЕРСИТЕТ УПРАВЛЕНИЯ «ТИСБИ» Факультет информационных технологий Кафедра информационных технологий Курсовая работа по дисциплине «Программная инженерия» на тему: Разработка объектной программы для задачи «Учета оплаты коммунальных услуг в управляющей компании» Выполнил: студент гр. ПИ-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 в пустую очередь Алгоритм удаления элемента и очереди: Проверка возможности удаления; Изменение указателя First на адрес второго элемента, который становится первым; этот адрес извлекается из адресного поля удаляемого элемента; Уменьшить счетчик числа элементов в очереди; 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 Увеличить счетчик числа элементов в списке(count+1); Count = 1 1 2 1 Count ++ Рис. 4. Добавление нового элемента «2» перед заданным элементом «1» в массив-список Алгоритм добавления нового элемента после заданного: Проверить возможность добавления; Поиск заданного элемента; Если заданный элемент найден в ячейке i, то для вставки нового элемента в следующую за ним ячейку, надо все последующие элементы сдвинуть вправо на одну ячейку; В ячейку i+1 заносится новый элемен; 1 2 3 Увеличить счетчик числа элементов в списке(count+1); Count = 3 1 2 3 Count ++ 1 2 4 3 Рис. 5. Добавление нового элемента «4» после заданного элемента «2» в массив-список Алгоритм удаления заданного элемента: Проверка наличия элементов в списке; Если список не пустой – поиск удаляемого элемента; Если удаляемый элемент найден в ячейке i, то он извлекается из этой ячейки и обрабатывается необходимым образом; Для сохранения естественного порядка элементов необходимо сдвинуть все элементы с i+1 до последнего влево на одну ячейку; 1 2 4 3 Уменьшить счетчик числа элементов в списке(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. на основе хеш-таблиц ООП позволяет упростить сложные объекты, составляя их из более маленьких и простых, поэтому над программой могут работать сотни разработчиков, каждый из которых занят своим блоком. Большинство современных языков программирования — объектно-ориентированные, и, однажды поняв суть, можно освоить сразу несколько языков. Главное, о чем не стоит забывать: ООП — это не единственная парадигма. У нее есть свои плюсы и минусы, для каких-то задач она подходит, для каких-то — нет. Например, ООП не даст особых преимуществ, если писать короткие функции и простые скрипты. Однако в больших проектах неразделенный на отдельные сущности код быстро превратится в «лапшу» и перестанет читаться, и ООП здесь сильно упростит работу. Описание разработанных классов В ходе решения поставленной задачи, было разработано три класса: YpravKomp;(класс управляющей компании) Dom;(класс дома) Kvartira;(класс квартиры) Ниже приведено формальное описание каждого разработанного класса. |