Разработка онлайн-органайзера с использованием объектно-ориентированного подхода. Исследование 1 Методология проектирования информационных систем
Скачать 1.64 Mb.
|
3.2 Разработка функциональной части клиентского приложенияДля разработки функциональной части клиентского приложения в данном дипломном проекте был использован язык C# (.NET Framework 3.0) и IDE (интегрированная среда разработки – Integrated Development Environment) Microsoft Visual Studio 2008. Язык C# является наиболее известной новинкой в области создания языков программирования. В отличие от 60-х годов XX века - периода бурного языкотворчества - в нынешнее время языки создаются крайне редко. За последние 15 лет большое влияние на теорию и практику программирования оказали лишь два языка: Eiffel, лучший, по моему мнению, объектно-ориентированный язык, и Java, ставший популярным во многом благодаря технологии его использования в Интернете и появления такого понятия как виртуальная Java-машина. Чтобы новый язык получил признание, он должен действительно обладать принципиально новыми качествами. Языку C# повезло с родителями. Явившись на свет в недрах Microsoft, будучи наследником C++, он с первых своих шагов получил мощную поддержку. Однако этого явно недостаточно для настоящего признания достоинств языка. Создателем языка является сотрудник Microsoft Андреас Хейлсберг. Он стал известным в мире программистов задолго до того, как пришел в Microsoft. Хейлсберг входил в число ведущих разработчиков одной из самых популярных сред разработки - Delphi. В Microsoft он участвовал в создании версии Java - J++, так что опыта в написании языков и сред программирования ему не занимать. Как отмечал сам Андреас Хейлсберг, C# создавался как язык компонентного программирования, и в этом одно из главных достоинств языка, направленное на возможность повторного использования созданных компонентов. Из других объективных факторов отметим следующие: C# создавался параллельно с каркасом Framework .Net и в полной мере учитывает все его возможности - как FCL, так и CLR; C# является полностью объектно-ориентированным языком, где даже типы, встроенные в язык, представлены классами; C# является мощным объектным языком с возможностями наследования и универсализации; C# является наследником языков C/C++, сохраняя лучшие черты этих популярных языков программирования. Общий с этими языками синтаксис, знакомые операторы языка облегчают переход программистов от С++ к C#; сохранив основные черты своего родителя, язык стал проще и надежнее. Простота и надежность, главным образом, связаны с тем, что на C# хотя и допускаются, но не поощряются такие опасные свойства С++ как указатели, адресация, разыменование, адресная арифметика; благодаря каркасу Framework .Net, ставшему надстройкой над операционной системой, программисты C# получают те же преимущества работы с виртуальной машиной, что и программисты Java. Эффективность кода даже повышается, поскольку исполнительная среда CLR представляет собой компилятор промежуточного языка, в то время как виртуальная Java-машина является интерпретатором байт-кода; мощная библиотека каркаса поддерживает удобство построения различных типов приложений на C#, позволяя легко строить Web-службы, другие виды компонентов, достаточно просто сохранять и получать информацию из базы данных и других хранилищ данных; реализация, сочетающая построение надежного и эффективного кода, является немаловажным фактором, способствующим успеху C#. [9] C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML. Также, C# обладает очень обширной библиотекой функций, благодаря .NET Framework. Программисту больше не нужно решать общие задачи или искать их реализации на других языках и заниматься портированием. Проиллюстрировать использование C# в данном дипломном проекте можно, приведя пример доработки главной формы (закладки «Заметки») функциональным интерфейсом. 3.2.1 Обработка событий формы, создание новых оконФункция отвечающая событию Click по кнопке «Добавить», открывает форму добавления/изменения заметки : private void NoteAddButtonClick(object sender, System.Windows.RoutedEventArgs e) {NoteAddEditWin NoteWin = new NoteAddEditWin(true, null); NoteWin.ShowDialog();} Функция отвечающая событию Click по кнопке «Изменить»: private void NoteEditButtonClick(object sender, System.Windows.RoutedEventArgs e) {if (NoteListBox.SelectedIndex != -1) {NoteAddEditWin NoteWin = new NoteAddEditWin(false, Postgres.Notes[NoteListBox.SelectedIndex]); NoteWin.ShowDialog();}} 3.2.2 Связывание данных (DataBinding)Передача данных, полученных в ходе выполнения программы, элементам управления созданным при помощи Microsoft Expression Blend на языке XAML, осуществляется с помощью связывания данных (Data Binding). Перед связывание необходимо получить требуемые данные от базы данных : Получения данных о заметках пользователя, выполняется при переходе на TabItem относящийся к заметкам: private void TabControlSelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) {string comstr = "SELECT \"Get_usr_notes(‘\" + uid.ToString() + "’);"; NpgsqlCommand command = new NpgsqlCommand(comstr, Postgres.PSqlConnection); try {NpgsqlDataReader dr =command.ExecuteReader(); while (dr.Read()) Postgres.Notes.Add(new Postgres.Note((string)dr.GetValue(0), (string)dr.GetValue(1), (DateTime)dr.GetValue(2), (string)dr.GetValue(3)));} catch (NpgsqlException ex) {MessageBox.Show(ex.ToString());} NoteListBox.DataContext = Postgres.Notes;} Выделенный фрагмент кода отвечает за привязку данных из Postgres.Notes к элементу управления NoteListBox. Структура поля DataContext должна совпадать со структурой привязываемых данных, в противном случае возникнет ошибка компиляции. Структура поля DataContext описывается в XAML-коде и фрагменты, отвечающие за описание структуры, приведены ниже: Код отвечающий за привязку данных в C#: 3.2.3 Провайдер баз данных PostgreSQL Npgsql 2.0.8Работа с базами данных на языке C# осуществляется через провайдеры, в данном дипломном проекте использован провайдер Npgsql 2.0.8. Всё «общение» с базой данных происходит через SQL-запросы. Сначала необходимо установить соединение с базой данных, для этого используется формализованная строка подключения. Структура строки следующая: "Server=<имя или адрес сервера базы данных (для локального – localhost)>; Port=<номер порта подключения к базе данных>; User Id=<имя пользователя базы данных>; Password=<пароль пользователя>;Database=<имя базы данных>;". Затем формируется SQL-запрос, который будет передан серверу. Возможны различные варианты выполнения запросов : (int)command.ExecuteScalar(); - подходит, если тип возвращаемого значения command.ExecuteReader(); command.ExecuteNonQuery(); Следующий пример показывает процесс подключения к базе данных, отправки ей сообщения, получения ответа и закрытия подключения, на примере аутентификации пользователя. В конструкторе окна происходит подключение к базе данных, а в функции Enter_Button_Click происходит посылка сообщения, чтение ответа и закрытие соединения: /// /// Default constructor. Sets connection to DB. /// public EnterWin() {this.InitializeComponent(); Postgres.PSqlConnection = new NpgsqlConnection(Postgres.ConnString); try {Postgres.PSqlConnection.Open();} catch (NpgsqlException ex) {MessageBox.Show(ex.ToString());}} /// /// "Вход" button click event. /// private void Enter_Button_Click(object sender, RoutedEventArgs e) {string comstr = "SELECT \"Login_user\"('" + Login_TextBox.Text.ToLower() + "','" + Postgres.MD5Hash(Pass_TextBox.Password) + "');"; NpgsqlCommand command = new NpgsqlCommand( comstr, Postgres.PSqlConnection); try {int uid = (int)command.ExecuteScalar(); if (uid == -1) {new YesNoWin("Ошибка ввода.", |