Занятие 12. Данные, данные, данные...
Давайте подведем некоторые итоги. На протяжении первых 12 занятий мы шаг за шагом изучали основные концепции языка программирования Java. Напомним их:
- Классы и экземпляры классов, поля и методы, параметры методов
- Конструкторы, типы
- Графические интерфейсы
- Пакеты, импорт, наследование
- Диалоговые окна
Наконец, на последних занятиях мы слегка коснулись схемы «модель-вид-контроллер» и начали знакомится с концепцией обработки событий. Разумеется, мы намеренно опустили ряд важных деталей, но во-первых, это не должно быть для вас новостью – мы об этом предупреждали с самого начала, а во-вторых, вы могли убедиться, что разработка программ на Java вовсе не так сложна, как могло показаться с самого начала. Как и в любом деле, в программировании важно понимать что действительно необходимо (т.е. без чего никак не обойтись), а что может быть до поры до времени отложено и изучено позже.
Итак, можно считать, что первичное знакомство с программированием на Java состоялось и мы можем двигаться дальше.
Давайте еще раз внимательно посмотрим на содержимое файлов исходных кодов MoneyForNothing.java и ConfirmExitDialog.java. Все это, конечно, здорово: окна, графика, кнопки, но в сущности, программа наша пока что абсолютно бесполезна. Она ничего не «умеет», т.е. не выполняет никакой действительно полезной работы. На данном этапе это только более-менее приличная упаковка с пустым содержанием.
Ценность любой программы определяется не столько ее внешним видом (что, разумеется, тоже очень важно), сколько тем, как и какие данные эта программа обрабатывает.
Понятие «данные», только что употребленное нами, настолько многозначно, что нет никакой возможности дать ему всеобъемлющее определение. Это могут быть графические файлы, файлы мультимедиа, базы данных и т.д. Одним словом, данные – это то, что можно обрабатывать посредством программ.
Конечно, такое определение почти ни на что не годится, но, мы надеемся, что вы примерно уловили о чем идет речь, а большего нам пока и не надо.
Наша программа тоже будет обрабатывать данные. В частности – данные о нашем (или вашем) персональном бюджете. Мы хотим написать такое приложение, чтобы с его помощью можно было отслеживать поступление и расходование денежных средств. Для начала давайте определимся из каких источников нам могут поступать деньги. Вот примерный список:
- зарплата
- бонусы
- гонорары
- подарки
- нашли кошелек на улице
- кража
- продажа имущества
- кредиты
- проценты по депозитам
Теперь давайте перечислим куда мы можем расходовать деньги:
- жилье
- одежда
- питание
- транспорт
- развлечения
- утеря кошелька
- кража
- прочие траты
- выплаты по процентам
- алименты
Конечно, оба списка далеко не полны и вы легко дополните их. Нас интересует сейчас не полнота этой номенклатуры (ее элементарно расширить), а принцип, который вполне очевиден.
Если общая сумма поступлений за какой-то период (скажем, за месяц) превышает общую сумму расходов за тот же самый период, то в конце периода у нас должны остаться свободные (не потраченные) деньги и ваше настроение, определенно, будет на высоте. Если же наоборот, то мы вам сочувствуем. Сложность любого учета состоит в том, что порой (а практически всегда) трудно вспомнить движения денежных сумм (особенно, расходов). Сколько раз мы с грустью пересчитывали жалкие остатки в карманах и в кошельке и не могли восстановить даже примерно – где, когда и на что же «улетели» наши деньги? Ведь в начале месяца у нас на руках была очень даже приличная сумма, а в конце – почти ничего; хоть бы на дорогу хватило.В общем, надо в этом деле навести порядок, решаете вы. И это правильно.
Коль скоро мы пришли к согласию относительно того, что нужно делать, нам надо решить во-первых, как и где эти данные будут храниться и во-вторых, как с этими данными мы будем обращаться. Здесь мы вступаем в действительно большую и сложную область, которую будем изучать постепенно. Речь, как нетрудно догадаться, пойдет о базах данных.
О базах данных существует многочисленная и очень объемная литература где с разной степенью точности, строгости и скрупулезности описывается что такое данные, как они должны представляться в компьютере, как данные хранится, добавляются, изменяются, как их искать и удалять. Мы не станем здесь углубляться в эту область, а сразу перейдем к делу.
На самом деле практически все мы знакомы с базами данных (и даже работаем с ними - порой чуть ли не ежедневно), хотя, возможно, об этом и не подозревали. Всем известный пример базы данных – электронные таблицы, такие, например, как Microsoft Excel:Здесь мы привели образец простейшей базы данных в которой ведется реестр расходов на постройку хозяйственной постройки (в данном случае – бани). Вы, конечно, с легкостью сможете привести множество примеров куда более сложных таблиц.
Здесь самое время ввести некоторую терминологию, используемую в базах данных.
Вообще говоря, база данных (далее, сокращенно – «БД») это обычно набор взаимосвязанных таблиц. Каждая из таблиц хранит определенный набор данных: одна – имена контрагентов, вторая – их реквизиты (счета, адреса и проч.), третья – список товаров, четвертая – операции по покупке продаже, пятая... В общем, БД описывает (весьма специфическим образом) ту или иную предметную область: торговлю, производство, финансы, схемы и т.д.
Вообще говоря, БД бывают различных типов (или, иначе, различных архитектур): реляционные, сетевые, иерархические. Нас будут интересовать только первые – реляционные или, проще, табличные.
В табличных БД (слово «табличные» мы будем, как правило опускать) данные организованы в виде строк, каждая из которых составлена из полей. Часто вместо слова «строка» употребляется термин «запись», а вместо слова «поле» - термин «столбец». На следующем фрагменте видно, что в нашей таблице имеется некоторое количество записей, причем каждая запись составлена из нескольких полей:
Поля (столбцы) поименованы как «Дата», «Товар», «Ед.изм.» и т.д. Очевидно, что каждое поле может хранить свой тип данных; поле «Дата», очевидно, предназначено для хранения дат, поля «Товар» и «Ед.изм» - описание (т.е. любой текст). Поля «Цена за ед.», «Кол-во» и «Стоимость» предназначены для хранения численных величин (надеюсь, всем понятно, что деньги – это числа?).
В правильно спроектированной БД типы данных должны соответствовать типу поля (столбца); это означает, что в поле «Кол-во» может храниться число и только число, но никак не дата и не текст.
Пересечение строки и столбца дает нам некоторый элемент данных. Обычно он так и называется – «элемент», но часто используется равнозначный термин «ячейка», который вам тоже должен быть знаком.
Остановитесь здесь на некоторое время, внимательно посмотрите иллюстрации и постарайтесь вспомнить какие таблицы вам доводилось видеть и как вы с ними работали. А лучше всего, запустите какой-либо табличный процессор (ну, хотя бы то же Microsoft Excel) и составьте в нем небольшую таблицу с любыми данным (например, список дней рождения ваших друзей и родственников).
Итак, мы определились с тем, как мы будем хранить данные в нашей программе – это будет реляционная (табличная) БД. Теперь нужно решить вопрос о том, какой БД мы воспользуемся.
Разумеется, можно постараться (причем, ну очень сильно постараться) разработать свою собственную БД, но этот путь увел бы нас так далеко в сторону от главной цели, что мы этой возможностью не воспользуемся. Гораздо практичнее воспользоваться уже имеющимися БД, которые в изобилии имеются в нашем распоряжении. Это, например, мощные (и сложные в настройке и использовании) БД от корпораций Oracle или Microsoft. Но для наших целей это чересчур «продвинутые» БД и мы остановимся других, куда более простых, но очень хороших вариантах. Вполне подойдут такие, например, БД:
Первые две БД - MySQL и MariaDB - практически идентичны (строго говоря, между ними вообще-то имеются различия и довольно существенные, но для нашей задачи они по своим возможностям практически неразличимы).
БД PostgreSQL чуть более «продвинутей» по своим возможностям, чем первые две БД, но она несколько сложнее в администрировании.
БД Apache Derby полностью написана на Java и это может дать определенные преимущества (например, эта БД включена в стандарную поставку JDK и ее не надо скачивать и устанавливать). С точки зрения производительности – это самая «неторопливая» БД из перечисленных, хотя для нашей задачи особая скорость, поверьте, ни к чему.
Последняя БД SQLite, честно говоря, наименее предпочтительный вариант (не смотря на то, что эта БД принята в качестве стандарта в популярной операционной системе для смартфонов и планшетов Android).
В общем, вы вправе выбрать любую из них. Мы остановили свой выбор на MariaDB, но, повторимся, это – не принципиальный выбор и вы можете воспользоваться любой из перечисленных БД.
А теперь – домашнее задание: зайдите на указанные выше сайты всех БД (внимание: эти сайты на английском языке, так что вооружитесь каким-нибудь словарем если не слишком уверены в своих знаниях английского). Изучите информацию о БД. Поищите информацию в википедии и на поисковых сайтах (хотя бы на www.yandex.ru или www.google.ru. Поищите информацию на форумах программистов (например, тут www.sql.ru).
Определитесь с выбором БД и скачайте последнюю стабильную версию (и обязательно учебники и документацию – поверьте, пригодятся). Не поддавайтесь искушению загружать самую «свежую» версию, не имеющую признака стабильной – в ней могут быть ошибки.
А теперь – установите выбранную БД на ваш компьютер! Тут вам мы, увы, помочь уже ничем не сможем, но в поддержку скажем, что по всем указанным БД имеется обширная документация (в том числе на русском языке – только надо поискать), а сами БД активно используются и обсуждаются в форумах. Удачи и до следующего занятия!!!
Занятие 11. События (взгляд с высоты)
Занятие 13. База данных – первое знакомство
Автор: Alex Tuesday
Все уроки ... 07.06.2014