Проектирование сложных объектов. Основные принципы проектирования. Аспекты и стадии проектирования

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

Центральный элемент ООП -- абстракция. Данные с помощью абстракции преобразуются в объекты. Каждый из объектов имеет свое собственное уникальное поведение. С объектами можно обращаться как с конкретными сущностями, которые реагируют на сообщения, приказывающие им выполнить какие-то действия. Каждый объект является представителем класса, который выражает общие свойства объектов данного типа. Абстрагирование (abstraction) -- метод решения задачи, при котором объекты разного рода объединяются общим понятием (концепцией), а затем сгруппированные сущности рассматриваются как элементы единой категории. Абстрагирование позволяет отделить логический смысл фрагмента программы от проблемы его реализации, разделив внешнее описание (интерфейс) объекта и его внутреннюю организацию (реализацию). Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик. Класс (class) -- множество объектов, связанных общностью структуры и поведения; абстрактное описание данных и поведения (методов) для совокупности похожих объектов, представители которой называются экземплярами класса.Класс содержит описание данных и операций над ними. Объект(object) -- конкретная реализация класса, обладающая характеристиками состояния, поведения и индивидуальности, синоним экземпляра. Объект – реальная именованная сущность, обладающая свойствами и проявляющая свое поведение. Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области. Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя.

Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом. Полиморфизм (polymorphism) – механизм, использующий одно и то же имя метода для решения двух или более похожих, но несколько отличающихся
задач. Целью полиморфизма применительно к ООП является использование одного имени для задания общих для класса действий. В более общем смысле концепцией полиморфизма является идея «один интерфейс, множество методов». Абстрактные классы объявляются с ключевым словомabstractи содержат объявления абстрактных методов, которые не реализованы в этих классах, а будут реализованы в подклассах. Объекты таких классов создать нельзя с помощью оператора new, но можно создать объекты подклассов, которые реализуют эти методы. При этом допустимо объявлять ссылку на абстрактный класс, но инициализировать ее можно только объектом производного от него класса. Абстрактные классы могут содержать и полностью реализованные методы, а также конструкторы и поля данных.

public abstract class Abstr { private int id;

public Abstr () {// конструктор}

public abstract void fun();// абстрактный метод

}

public class B extends Abstr {

public void fun () {// ...}}

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

public interface Int {

public abstract void fun();

}

public class B implements Int {

public void fun () {// ...}

}

Объектные ссылки языка Java содержат информацию о классе объектов, на которые они ссылаются, так что объектные ссылки – это не указатели, а дескрипторы объектов. User user; //объявление ссылки

2. Базовые понятия Клиент-Сервер, основные модели реализации. Механизм вызова функций в одном адресном пространстве. Особенности и проблемы реализации удаленных вызовов (в различных адресных пространствах). Сериализация и маршализация: механизмы и метод.

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

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

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

Один из основных принципов технологии “клиент – сервер” заключается в разделении операций и средств обработки данных на три группы:

- средства представления (компонент представления), реализующие, ввод и отображение данных;

прикладные средства (прикладной компонент), поддерживающие операции обработки данных;

средства доступа (компонент доступа) к информационным ресурсам, реализующие операции хранения и управления данными.

Модели реализации: RMI, CORBA, EJB, веб-приложения.

Сериализацияэто процесс сохранения состояния объекта в последовательность байт; десериализацияэто процесс восстановления объекта, из этих байт.

В Java всё представлено в виде объектов; Если двум компонентам Java необходимо общаться друг с другом, то им необходим механизм для обмена данными. Есть несколько способов реализовать этот механизм. Первый способ это разработать собственный протокол и передать объект. Это означает, что получатель должен знать протокол, используемый отправителем для воссоздания объекта, что усложняет разработку сторонних компонентов. Следовательно, должен быть универсальный и эффективный протокол передачи объектов между компонентами. Сериализация создана для этого, и компоненты Java используют этот протокол для передачи объектов.

Для начала следует убедиться, что класс сериализуемого объекта реализует интерфейсjava.io.Serializable:

import java.io.Serializable;

class TestSerial implements Serializable {
public byte version = 100;
public byte count = 0;
}
Интерфейс Serializable это интерфейс-маркер; в нём не задекларировано ни одного метода. Но говорит сериализующему механизму, что класс может быть сериализован.

Теперь у нас есть всё необходимое для сериализации объекта, следующим шагом будет фактическая сериализация объекта. Она делается вызовом метода writeObject() класса java.io.ObjectOutputStream

 

public static void main(String args[]) throws IOException {
FileOutputStream fos = new FileOutputStream("temp.out");
ObjectOutputStream oos = new ObjectOutputStream(fos);
TestSerial ts = new TestSerial();
oos.writeObject(ts);
oos.flush();
oos.close();
}//показано сохранение состояния экземпляра TestSerial в файл с именем temp.out

Маршализация - это когда какие-то данные переводят из одного представления в другое. Например, есть структура написанная на java, а её переводят в XML или обратно.


 

3. Определение распределенной системы. Понятие и определение программной компоненты. Понятие промежуточной среды. Модели взаимодействия компонент распределенной системы. Удаленный вызов процедур, варианты. Методы передачи сообщений. Распределенные события (тесно связанные и слабосвязанные). Распределенные транзакции, основные свойства.

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

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

Понятие промежуточной среды:

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

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

Во втором случае используется посредник – менеджер очередей сообщений. Компонента посылает сообщение в одну из очередей менеджера, после чего она может продолжить свою работу. В дальнейшем получающая сторона извлечет сообщение из очереди менеджера и приступит к его обработке. Удаленный вызов процедур:Идея удаленного вызова процедур (remote procedure call, RPC).Существует три возможных варианта удаленного вызова процедур.

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

Асинхронный вызов: клиент продолжает свое выполнение, при завершении сервером выполнения процедуры он получает уведомление и результат ее выполнения, например через callback-функцию, вызываемую промежуточной средой при получении результата от сервера.

Распределенные события:

Можно выделить два подхода к обработке событий – тесно связанные и слабо связанные события. При тесно связанном событии происходит прямое уведомление одной стороны другой стороной. слабо связанные события, когда источники события (издатели) не взаимодействуют напрямую с получателями событий (подписчиками). Промежуточная среда в этом случае должна предоставить сервис, позволяющий подписчику подписаться на какое-либо событие или отказаться от подписки, а издателю – инициировать событие для рассылки подписчикам .Транзакция –последовательность операций с какими-либо данными, которая либо успешно выполняется полностью, либо не выполняется вообще. Атомарность. Транзакция выполняется по принципу "все или ничего". Согласованность. После успешного завершения или отката транзакции все данные находятся в согласованном состоянии, их логическая целостность не нарушена. Изоляция. Для объектов вне транзакции не видны промежуточные состояния, которые могут принимать изменяемые в транзакции данные. С точки зрения "внешних" объектов, до успешного завершения транзакции они должны иметь то же состояние, в котором находились до ее начала. Постоянство. В случае успешности транзакции сделанные изменения должны иметь постоянный характер (т.е. сохранены в энергонезависимой памяти).Распределенной называется транзакция,охватывающая операции нескольких взаимодействующих компонент распределенной системы.

Условия:промежуточная среда должна поддерживать управление распределенными между несколькими компонентами транзакциями; компоненты распределенной системы не должны работать с какими-либо службами или ресурсами, которые не могут участвовать в транзакции.

 


Проектирование сложных объектов. Основные принципы проектирования. Аспекты и стадии проектирования

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

Проектирование сложных объектов базируется на следующих основных принципах:

- декомпозиции и иерархичности описаний объектов;

- многоэтапность и итеррационность проектирования;

-типизация и унификация проектных решений и средств проектирования.

Аспекты проектирования.

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

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

Технологический аспект относится к реализации результатов конструкторского проектирования, т.е. связан с описанием методов и средств изготовления объектов.

Стадии проектирования.

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

На стадии технического проекта выполняется всесторонняя проработка всех частей проекта, конкретизируются и детализируются технические решения.

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