Описание предметной области




СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ………………………………………………………………………..3

1 Объектно-ориентированное программирование……....................................5

1.1. ……………………………………………………........................................5

1.2………….....….............................................................................................

2 Язык программирования ” Python ”……….………………………………….9

2.1. …………………..……………………………………………..9

3 Практическая часть………….……………….………………………………13

3.1.……………………….…………………………………………..13

3.2……………………………….……….……………………………..14

3.3…………………………………………………………................15

ЗАКЛЮЧЕНИЕ.………………………………………………………………...19

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ …………...........................21

 

ВВЕДЕНИЕ

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

Цель данной работы: создать модель системы учёта номерного фонда, используя объектно-ориентированного программирование (ООП).

Задачами работы являются: анализ теоретических основ ООП, изучение языка программирования ” Python ”, применение полученных знаний на практике для реализации предметной области.

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



 


Объектно-ориентированное программирование

Основные понятия ООП

При объектно-ориентированном программировании программа строится как совокупность взаимодействующих объектов.

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

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

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

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

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

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

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

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

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

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

 

Концепции ООП

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

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

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

Будем считать, что значение функции или переменной может быть присвоено абстракции и является значением последней.

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

Другой фундаментальной составляющей концепции объектно-ориентированного программирования является понятие наследования.

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

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

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

Еще одним фундаментальным компонентом концепции объектно-ориентированного программирования является понятие инкапсуляции.

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

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

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

Хотя инкапсуляция как таковая является фундаментальным свойством ООП, степень инкапсуляции при наследовании может варьироваться в зависимости от типа области видимости объекта, который определяется модификатором видимости.

К основным свойствам инкапсуляции относятся следующие возможности:

1. совместное хранение данных и функций (т.е. свойств и методов) внутри объекта;

2. сокрытие внутренней информации от пользователя (что обеспечивает большую безопасность приложения);

3. изоляция пользователя от особенностей реализации (что обеспечивает независимость от машины и потенциально дружественный интерфейс приложений).

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

3.1 Язык программирования ” Python ”

Голландец Гвидо ван Россум, создатель языка программирования Python, говорит о своём творении следующее: "Python - интерпретируемый, объектно-ориентированный высокоуровневый язык программирования с динамической семантикой. Встроенные высокоуровневые структуры данных в сочетании с динамическими типизацией и связыванием делают язык привлекательным для быстрой разработки приложений (RAD, Rapid Application Development). Кроме того, его можно использовать в качестве сценарного языка для связи программных компонентов. Синтаксис Python прост в изучении, в нем придается особое значение читаемости кода, а это сокращает затраты на сопровождение программных продуктов. Python поддерживает модули и пакеты, поощряя модульность и повторное использование кода. Интерпретатор Python и большая стандартная библиотека доступны бесплатно в виде исходных и исполняемых кодов для всех основных платформ и могут свободно распространяться."

Python - это универсальный язык программирования. Он имеет свои преимущества и недостатки, а также сферы применения. В поставку Python входит обширная стандартная библиотека для решения широкого круга задач. В Интернете доступны качественные библиотеки для Python по различным предметным областям: средства обработки текстов и технологии Интернет, обработка изображений, инструменты для создания приложений, механизмы доступа к базам данных, пакеты для научных вычислений, библиотеки построения графического интерфейса и т.п. Кроме того, Python имеет достаточно простые средства для интеграции с языками C, C++ (и Java) как путем встраивания (embedding) интерпретатора в программы на этих языках, так и наоборот, посредством использования библиотек, написанных на этих языках, в Python-программах. Язык Python поддерживает несколько парадигм программирования: императивное (процедурный, структурный, модульный подходы), объектно-ориентированное и функциональное программирование.

Можно считать, что Python - это целая технология для создания программных продуктов (и их прототипов). Она доступна почти на всех современных платформах (как 32-битных, так и на 64-битных) с компилятором C и на платформе Java.

Создание Python было начато Гвидо ван Россумом (Guido van Rossum) в 1991 году, когда он работал над распределенной ОС Амеба. Ему требовался расширяемый язык, который бы обеспечил поддержку системных вызовов. За основу были взяты ABC и Модула-3. В качестве названия он выбрал Python в честь комедийных серий BBC "Летающий цирк Монти-Питона", а вовсе не по названию змеи. С тех пор Python развивался при поддержке тех организаций, в которых Гвидо работал. Особенно активно язык совершенствуется в настоящее время, когда над ним работает не только команда создателей, но и целое сообщество программистов со всего мира. И все-таки последнее слово о направлении развития языка остается за Гвидо ван Россумом.

 

Практическая часть

Описание предметной области

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

Классы объектов

Клиенты (Клиент, Фамилия, Имя, Отчество, Паспортные данные, Комментарий).
Номера (Номер, Количество человек, Комфортность, Цена).
Поселение (Клиент, Номер, Дата поселения, Дата освобождения, Примечание).

Диаграмма классов

# -*- coding: utf-8 –

В первой строке задаётся кодировка файла программы. Это необходимо, если в тексте программы используются символы кириллицы. В данном случае используется кодировка utf-8

import itertools,os

from connect import create,close

строка подключает функции для работы с базой данных SQLite.

import sqlite3

Далее описан класс “Client”, он имеет атрибуты “code” – уникальный номер, по значению которого можно однозначно идентифицировать объект (ФИО клиентов могут совпадать), “name” – имя клиента, и, соответственно название функции доступа к значению этого атрибута. Аналогичное описание для атрибутов “family”, “name”, “patronym”, “comment”, “passport”.
Двойной символ подчёркивания в названии атрибута означает, что он приватный, т.е. недоступный вне класса. Доступ к нему осуществляется через специальные функции: “setname” – позволяет изменить значение атрибута (аналогично “setfamily”, “setpatronym”, “setcomment”, “setpassport”), “getname” – позволяет получить значение атрибут (аналогично “getfamily”, “getpatronym”, “getcomment”, “getpassport”). В начале описывается конструктор класса “init” – функция, размещающая объект в памяти и возвращающая ссылку на него, кроме того конструктор может может выполнять некоторые действия, необходимые при создании объекта, в данном случае это задание начальных значений атрибутов.

class Client:

def __init__(self, code=0, family='', name='', patronym='', comment='', passport=''):

self.setcode(code)

self.setfamily(family)

self.setname(name)

self.setpatronym(patronym)

self.setcomment(comment)

self.setpassport(passport)

def setcode(self,code):self.__code=code

def getcode(self):return self.__code

def setfamily(self,family):self.__family=family

def getfamily(self):return self.__family

def setname(self,name):self.__name=name

def getname(self):return self.__name

def setpatronym(self,patronym):self.__patronym=patronym

def getpatronym(self):return self.__patronym

def getcomment(self):

return self.__comment

def setcomment(self,comment):self.__comment=comment

def setpassport(self,passport):self.__passport=passport

def getpassport(self):return self.__passport

def getfullname(self):return self.__family+" "+self.__name+" "+self.__patronym

 

class Room:

def __init__(self, code=0, number='', capacity='', comfort='', price=''):

self.setcode(code)

self.setnumber(number)

self.setcapacity(capacity)

self.setcomfort(comfort)

self.setprice(price)

def setcode(self,code):self.__code=code

def getcode(self):return self.__code

def setnumber(self,number):self.__number=number

def getnumber(self):return self.__number

def setcapacity(self,capacity):self.__capacity=capacity

def getcapacity(self):return self.__capacity

def setcomfort(self, comfort):self.__comfort=comfort

def getcomfort(self):return self.__comfort

def setprice(self, price):self.__price=price

def getprice(self):return self.__price

 

class Accom:

def __init__(self, code=0, Room=None, date_in='', date_out='', notes=""):

self.setcode(code)

self.__clients=[]

self.setroom(Room)

self.setdate_in(date_in)

self.setdate_out(date_out)

self.setnotes(notes)

def setcode(self,code):self.__code=code

def getcode(self):return self.__code

def setclients(self,value):self.__clients=value

def appendclient(self,value):self.__clients.append(value)

def getclients(self):return self.__clients

def setroom(self,Room):self.__Room=Room

def getroom(self):return self.__Room

def setdate_in(self,date_in):self.__date_in=date_in

def getdate_in(self):return self.__date_in

def setdate_out(self,date_out):self.__date_out=date_out

def getdate_out(self):return self.__date_out

def setnotes(self,notes):self.__notes=notes

def getnotes(self):return self.__notes

def getcost(self):

stroka=""

if self.getcode():

scode=str(self.getcode())

if self.getclients():

sfio=self.getclients()[0].getfullname()

else:sfio=''

if self.getroom():

snomer=str(self.getroom().getnumber())

else:snomer=''

if self.getroom():

sprice=self.getroom().getprice()

else:sprice=0

if self.getdate_in():

sdate_in=self.getdate_in()

else:sdate_in=''

if self.getdate_out():

sdate_out=self.getdate_out()

else:sdate_out=''

stroka=scode+' '+sfio+' N'+snomer+' '+self.getdate_in()+'-'+self.getdate_out()+' '+str(sprice)

return stroka

 

Модуль “connect.py” содержит функции для работы с базой данных. Функция “create()” – проверяет наличие базы данных и создаёт объекты для работы с базой, в случае отсутствия базы данных, сохдаёт её и заполняет текстовыми значениями. Функция “close()” – завершает соединение с базой данных.

# -*- coding: cp1251 -

import os

import sqlite3 as db

sql_txt = """

PRAGMA foreign_keys = ON;

 

create table client

(code integer primary key,

family text,

name text,

patronym text,

comment text,

passport text);

 

create table room

(code integer primary key,

number text,

capacity text,

comfort text,

price integer);

 

create table accom

(code integer primary key,

client integer references client(code) on update cascade on delete set null,

room integer references room(code) on update cascade on delete set null,

date_in text,

date_out text,

notes text);

 

insert into client (code,family,name,patronym,comment,passport) values (1, "Ivanov", "Ivan", "Ivanovich", "Simple klient", "6415 234567 Given 21 of October");

insert into client (code,family,name,patronym,comment,passport) values (2, "Petrov", "Petr", "Petrovich", "Best klient", "6417 674578 Given 19 of November");

insert into client (code,family,name,patronym,comment,passport) values (3, "Sidorov", "Sidor", "Sidorovich", "Best klient", "6419 987560 Given 14 of January");

 

insert into room (code,number,capacity,comfort,price) values (1, "101", "for three klients", "standart", 1200);

insert into room (code,number,capacity,comfort,price) values (2, "202", "for two klients", "lux", 2500);

insert into room (code,number,capacity,comfort,price) values (3, "205A", "for one klient", "partlux", 1800);

 

insert into accom (code,client,room,date_in,date_out,notes) values (1,3,1, "10.09.2015", "17.09.2015", "without breakfast");

insert into accom (code,client,room,date_in,date_out,notes) values (2,1,2, "7.09.2015", "15.09.2015", "without dinner");

insert into accom (code,client,room,date_in,date_out,notes) values (3,2,2, "20.04.2015", "28.04.2015", "without supper");

 

"""

def create(dbfile):

create = not os.access(dbfile, os.R_OK)

conn = db.connect(dbfile)

curs = conn.cursor()

if create:

try:

curs.executescript(sql_txt)

except db.DatabaseError, x:

print x

conn.rollback()

else:

conn.commit()

return (db, conn, curs)

 

def close(db, conn, curs):

conn.close()

 

 

Результат работы программы:


 

Заключение

 


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Сузи, Р.А. Язык программирования Python/ Р.А. Сузи. – Интернет – университет информационных технологий – ИНТУИТ.ру, БИНОМ. Лаборатория знаний, 2006. – С. 328.

2. Клочков Д.П., Павлов Д.А. Введение в объектно-ориентированное программирование. / Учебно-методическое пособие. - Изд. Нижегор. ун-та, 1995. - 70с

3. Бенджамин Пирс. Типы в языках программирования. — Добросвет, 2012. — 680 с. — ISBN 978-5-7913-0082-9.

4. Иан Грэхем. Объектно-ориентированные методы. Принципы и практика = Object-Oriented Methods: Principles & Practice. — 3-е изд. — М.: «Вильямс», 2004. — С. 880. — ISBN 0-201-61913-X.

5. Марк Лутц. Программирование на Python / Пер. с англ. — 4-е изд. — СПб.: Символ-Плюс, 2011. — Т. I. — 992 с.

6. С. Шапошникова. Основы программирования на Python. Учебник. Вводный курс. — версия 2. — 2011. — 44 с.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-07 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: