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

Решения, решения

Структуры данных, которые изначально рассматривались для этого проекта, были:

· Списки

· Словари

· Кортежи

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

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

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

Близкое знакомство с объектно-ориентированным программированием

Чтобы приступить к этому этапу разработки кода, мне пришлось сначала проанализировать проблему, которую я пытался решить с помощью своего приложения, а затем определить классы, которые мне понадобятся. Для этого мне пришлось написать так называемую «проблемную область» или, другими словами, написать небольшой рассказ о типичном сценарии, в котором будет использоваться мое приложение. Моя история была такой:

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

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

- Пациент

- Провайдер

- Сталкиваться

Но этого было недостаточно! Мне еще предстояло определить, какие обязанности были у каждого из этих классов. Чтобы проиллюстрировать это, мне нужно было решить, что должен знать и делать класс Patient. Если подумать, этот класс должен иметь имя пациента и медицинский номер, верно?? Если вы посмотрите на мой код на github, вы увидите, что я включил эти, а также некоторые другие атрибуты в класс Patient.

Удивительный метод __init__!

Этот метод инициализации позволяет мне создать план для объектов в каждом из моих классов. Python будет вызывать этот метод всякий раз, когда создается новый экземпляр (или объект) класса. Цель этого метода — инициализировать объект значениями. Вот пример этого метода с использованием простого класса Patient:

класс Пациент:

def__init__ (я, имя, медицинский_номер):

self.name = имя

self.medical_number = медицинский_номер

#создать экземпляр класса Patient

пациент1 = пациент («Боб», 12345)

печать (пациент1.имя)

Боб

Что дальше?

Следующие шаги для меня включают (не обязательно по порядку!):

Создание экземпляров моих классов

Решаю, буду ли я использовать кортежи

Разработка реляционной базы данных для хранения всех этих данных

Выбор ORM для запроса базы данных, например Pony ORM.

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

Следите за моей следующей записью в блоге «Подведение итогов» от 15 июня 2017 г., где я расскажу о последних этапах моего проекта и подготовке к представлению своего приложения сообществу ChiPy.