Facebook google+ e-mail
Учимся программировать на JAVA
Практикум по программированию на языке Java

Занятие 12. Данные, данные, данные...

Давайте подведем некоторые итоги. На протяжении первых 12 занятий мы шаг за шагом изучали основные концепции языка программирования Java. Напомним их:

  1. Классы и экземпляры классов, поля и методы, параметры методов
  2. Конструкторы, типы
  3. Графические интерфейсы
  4. Пакеты, импорт, наследование
  5. Диалоговые окна

Наконец, на последних занятиях мы слегка коснулись схемы «модель-вид-контроллер» и начали знакомится с концепцией обработки событий. Разумеется, мы намеренно опустили ряд важных деталей, но во-первых, это не должно быть для вас новостью – мы об этом предупреждали с самого начала, а во-вторых, вы могли убедиться, что разработка программ на Java вовсе не так сложна, как могло показаться с самого начала. Как и в любом деле, в программировании важно понимать что действительно необходимо (т.е. без чего никак не обойтись), а что может быть до поры до времени отложено и изучено позже.

Итак, можно считать, что первичное знакомство с программированием на Java состоялось и мы можем двигаться дальше.

Давайте еще раз внимательно посмотрим на содержимое файлов исходных кодов MoneyForNothing.java и ConfirmExitDialog.java. Все это, конечно, здорово: окна, графика, кнопки, но в сущности, программа наша пока что абсолютно бесполезна. Она ничего не «умеет», т.е. не выполняет никакой действительно полезной работы. На данном этапе это только более-менее приличная упаковка с пустым содержанием.

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

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

Конечно, такое определение почти ни на что не годится, но, мы надеемся, что вы примерно уловили о чем идет речь, а большего нам пока и не надо.

Наша программа тоже будет обрабатывать данные. В частности – данные о нашем (или вашем) персональном бюджете. Мы хотим написать такое приложение, чтобы с его помощью можно было отслеживать поступление и расходование денежных средств. Для начала давайте определимся из каких источников нам могут поступать деньги. Вот примерный список:

  • зарплата
  • бонусы
  • гонорары
  • подарки
  • нашли кошелек на улице
  • кража
  • продажа имущества
  • кредиты
  • проценты по депозитам

Теперь давайте перечислим куда мы можем расходовать деньги:

  • жилье
  • одежда
  • питание
  • транспорт
  • развлечения
  • утеря кошелька
  • кража
  • прочие траты
  • выплаты по процентам
  • алименты

Конечно, оба списка далеко не полны и вы легко дополните их. Нас интересует сейчас не полнота этой номенклатуры (ее элементарно расширить), а принцип, который вполне очевиден.

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

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

В общем, надо в этом деле навести порядок, решаете вы. И это правильно.

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

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

На самом деле практически все мы знакомы с базами данных (и даже работаем с ними - порой чуть ли не ежедневно), хотя, возможно, об этом и не подозревали. Всем известный пример базы данных – электронные таблицы, такие, например, как Microsoft Excel:

Программируем на Java. Данные...

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

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

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

Вообще говоря, БД бывают различных типов (или, иначе, различных архитектур): реляционные, сетевые, иерархические. Нас будут интересовать только первые – реляционные или, проще, табличные.

В табличных БД (слово «табличные» мы будем, как правило опускать) данные организованы в виде строк, каждая из которых составлена из полей. Часто вместо слова «строка» употребляется термин «запись», а вместо слова «поле» - термин «столбец». На следующем фрагменте видно, что в нашей таблице имеется некоторое количество записей, причем каждая запись составлена из нескольких полей:

Программируем на Java. Данные...

Поля (столбцы) поименованы как «Дата», «Товар», «Ед.изм.» и т.д. Очевидно, что каждое поле может хранить свой тип данных; поле «Дата», очевидно, предназначено для хранения дат, поля «Товар» и «Ед.изм» - описание (т.е. любой текст). Поля «Цена за ед.», «Кол-во» и «Стоимость» предназначены для хранения численных величин (надеюсь, всем понятно, что деньги – это числа?).

В правильно спроектированной БД типы данных должны соответствовать типу поля (столбца); это означает, что в поле «Кол-во» может храниться число и только число, но никак не дата и не текст.

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

Остановитесь здесь на некоторое время, внимательно посмотрите иллюстрации и постарайтесь вспомнить какие таблицы вам доводилось видеть и как вы с ними работали. А лучше всего, запустите какой-либо табличный процессор (ну, хотя бы то же 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