Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


Reverse engineering Ц построение UML-диаграмм по разработанным классам




—реда NetBeans при установленном пакете NetBeans Enterprise Pack позвол€ет по имеющемус€ исходному коду построить UML-диаграммы. ƒл€ этого следует открыть проект и нажать на главной панели среды разработки кнопку УReverse EngineerЕФ

 

 

 нопка УReverse EngineeringФ

 

ѕо€витс€ диалогова€ форма задани€ параметров создаваемого проекта, в которой следует изменить название проекта на осмысленное, по которому легко можно будет определить, к какому проекту Java он относитс€.

ƒиалогова€ форма задани€ параметров создаваемого UML-проекта

 

¬ нашем случае UMLProject7 мы заменим на UML_Figure. ѕосле нажати€ на кнопку Finish (У«акончитьФ) будет выдана форма с ненужной вспомогательной информацией, и в ней следует нажать кнопку Done (У—деланоФ). ¬ результате чего мы получим новый UML-проект, в котором можно просмотреть параметры, относ€щиес€ к каждому классу:

 

ѕараметры UML-проекта, относ€щиес€ к классу Circle

 

ƒл€ класса показываютс€ конструкторы и обычные методы (узел Operations), а также отношени€ наследовани€ и другие варианты отношений (узел Relationships).

¬ UML-проекте можно сгенерировать UML-диаграммы, щЄлкнув правой кнопкой мыши по имени соответствующего класса:

 

¬сплывающее меню действий с классом в UML-проекте

 

≈сли выбрать пункт УCreate Diagram From Selected ElementsФ (У—оздать диаграмму из выбранных элементовФ), и далее выбрать тип диаграммы УClass DiagramФ,

 

¬ыбор типа создаваемой диаграмы

 

можно получить диаграмму такого вида:

 

ƒиаграмма дл€ класса Circle

 

ѕри этом лучше заменить им€ создаваемой диаграммы, например, на Circle Diagram. ѕереименование можно сделать и позже, щЄлкнув правой кнопкой мыши по имени диаграммы и выбрав в по€вившемс€ всплывающем меню пункт RenameЕ (УѕереименоватьЕФ).

≈сли же выделить Circle,Dot,Figure, ScalableFigure, мы получим диаграмму наследовани€, которой можно дать им€ Inheritance Diagram.

 

ƒиаграмма дл€ классов Circle,Dot,Figure, ScalableFigure

 

≈сли дл€ класса Circle во всплывающем меню выбрать пункт УGenerate Dependency DiagramФ (У—генерировать диаграмму зависимостейФ), получим следующую диаграмму:

 

ƒиаграмма зависимостей дл€ класса Circle

ѕункт всплывающего меню Navigate to Source позвол€ет вместо диаграмм показывать редактор исходного кода.

Ќа диаграммах можно добавл€ть в классы или удал€ть из них пол€ и методы, проводить переименовани€, мен€ть модификаторы. ѕричЄм изменени€, сделанные на любой из диаграмм, автоматически отражаютс€ как на других диаграммах UML-проекта, так и в исходном коде проекта Java (это проектирование Ц Forward Enineering). » наоборот - изменени€, сделанные в исходном коде Java, автоматически примен€ютс€ к диаграммам UML (это обратное проектирование Ц Reverse Enineering).

¬ насто€щее врем€ работа с UML-проектами в NetBeans Enterprise Pack не до конца отлажена, иногда наблюдаютс€ УбагиФ (мелкие ошибки). Ќо можно наде€тьс€, что в ближайшее врем€ недостатки будут исправлены.

 


 раткие итоги по главе 6

ü Ќаследование опираетс€ на инкапсул€цию. ќно позвол€ет строить на основе первоначального класса новые, добавл€€ в классы новые пол€ данных и методы. ѕервоначальный класс называетс€ прародителем (ancestor), новые классы Ц его потомками (descendants). ќт потомков можно наследовать, получа€ очередных потомков. Ќабор классов, св€занных отношением наследовани€, называетс€ иерархией классов.  ласс, сто€щий во главе иерархии, от которого унаследованы все остальные (пр€мо или опосредованно), называетс€ базовым классом иерархии.

ü »ерархи€ нужна дл€ того, чтобы писать полиморфный код. ќсновные преимущества объектного программировани€ обеспечиваютс€ наличием полиморфного кода.

ü ѕол€ отражают состо€ние объекта, а методы - задают его поведение.

ü „ем ближе к основанию иерархии лежит класс, тем более общим и универсальным (general) он €вл€етс€. „ем дальше от базового класса иерархии стоит класс, тем более специализированным (specialized) он €вл€етс€.

ü  аждый объект класса-потомка при любых значени€х его полей данных должен рассматриватьс€ как экземпл€р класса-прародител€ на уровне абстракций поведени€, но с некоторыми изменени€ми в реализации этого поведени€.

ü ѕроектирование классов осуществл€етс€ с помощью UML-диаграмм.

ü ¬ Java подпрограммы задаютс€ только как методы в каком-либо классе и называютс€ функци€ми. ќбъ€вление в классе функции состоит из задани€ заголовка и тела функции (еЄ реализации).

ü ѕараметры, указанные в заголовке функции при еЄ декларации, называютс€ формальными. ј те параметры, которые подставл€ютс€ во врем€ вызова функции, называютс€ фактическими. ‘ормальные параметры нужны дл€ того, чтобы указать последовательность действий с фактическими параметрами после того, как те будут переданы в подпрограмму во врем€ вызова. Ёто ни что иное, как особый вид локальных переменных, которые используютс€ дл€ обмена данными с внешним миром.

ü ѕараметры в Java передаютс€ в функцию всегда по значению. ѕередача по ссылке отсутствует. ¬ частности, ссылки передаютс€ в функции по значению.

ü ¬ Java имеютс€ уровни видимости private (УчастныйФ, УзакрытыйФ), пакетный, protected (УзащищЄнныйФ) и public (ќбщедоступный). ѕакетный Ц уровень видимости по умолчанию дл€ полей и методов, дл€ задани€ остальных уровней используютс€ модификаторы private, protected и public.

ü —сылка this обеспечивает ссылку на объект из метода объекта. „аще всего она используетс€ при перекрытии области видимости имени пол€ объекта формальным параметром функции.

ü ¬ классе-наследнике методы можно переопредел€ть. ѕри этом у них должен сохран€тьс€ контракт Ц в который входит весь заголовок метода за исключением имЄн формальных параметров.

ü ћожно задавать перегруженные (overloaded) варианты методов, отличающиес€ сигнатурой. ¬ сигнатуру входит только часть заголовка метода Ц им€ функции, а также число, пор€док и тип еЄ параметров.

ü ѕеременной некоторого объектного типа можно присваивать выражение, имеющее тот же тип или тип класса-наследника. ¬ качестве фактического параметра функции вместо формального параметра некоторого объектного типа можно подставл€ть выражение, имеющее тот же тип или тип класса-наследника. »менно это правило обеспечивает возможность использовани€ полиморфного кода.

ü ƒл€ приведени€ типа используетс€ им€ типа, заключЄнное в круглые скобки Ц как и дл€ преобразовани€ типа. Ќо при преобразовании типа могут мен€тьс€ содержимое и размер €чейки, к которой примен€етс€ данный оператор, а при приведении типа €чейка и еЄ содержимое остаютс€ теми же, просто начинают считать, что у €чейки другой тип.

ü ѕроверка на то, что объект €вл€етс€ экземпл€ром заданного класса, осуществл€етс€ оператором instanceof: if(figure instanceof Circle)...

ü ¬озможна программна€ проверка точного соответстви€ объекта нужному типу с помощью ссылки на класс: if(figure.getClass()==Circle.class)... ѕри этом дл€ экземпл€ра класса-наследника Circle сравнение даст false, в отличие от экземпл€ра Circle.

ü ќператор isInstance позвол€ет провер€ть, €вл€етс€ ли тип объекта совместимым с классом, на который задана ссылка c: if(c.isInstance(figure))... ѕри если класс, экземпл€ром которого €вл€етс€ объект figure, €вл€етс€ наследником класса c или совпадает с ним, сравнение даст true.

ü –ефакторинг Ц изменение структуры существующего проекта без изменени€ его функциональности. “ри наиболее часто встречающихс€ примера рефакторинга: 1) ѕереименование элементов программы Ц классов, переменных, методов. 2) ѕеремещение элементов программы с одного места на другое. 3) »нкапсул€ци€ полей данных.

ü — помощью средств Reverse Engineering можно создавать UML-диаграммы классов и зависимостей классов. ѕричЄм после создани€ UML-проекта, сопровождающего Java-проект, изменени€, сделанные в исходном коде Java, автоматически примен€ютс€ к диаграммам UML, и наоборот.

 

“ипичные ошибки:

  • ќчень часто ошибочно считают более общим объект, из которого можно получить другой при каких-либо конкретных значени€х полей данных. Ќапример, окружность считают частным значением эллипса, а точку Ц частным значением окружности. Ќо в объектном программировании отношени€ общности и специализации объектов определ€ютс€ по сложности их устройства (наличию дополнительных полей данных и методов), а также их поведению при произвольных значени€х их полей данных. „ем сложнее объект, тем он более специализирован (менее общий).
  • ќчень часто возникают ошибки при попытке вернуть из функции изменЄнные значени€ ссылочных переменных, переданных через список параметров. ƒл€ такого возврата надо либо использовать глобальную переменную, либо передавать ссылку на объект, полем которого €вл€етс€ измен€ема€ переменна€.
  • »спользуют неправильное приведение типа. Ќапример, если переменной Object object присвоена ссылка на объект типа Dot, а пытаютс€ сделать приведение (Circle) object. “ака€ ошибка на этапе компил€ции не может быть распознана, и возникает исключительна€ ситуаци€ неправильного приведени€ типа (invalid typecast) во врем€ выполнени€ программы.
  • ќператор instanceof используют дл€ распознавани€ типов одной иерархии, счита€, что он

«адани€

  • ¬ классе MathUtil написать подпрограмму вычислени€ факториала

public static double factorial(int n)

ћодификатор static помечает подпрограмму как метод класса. “о есть позвол€ет вызывать метод через им€ класса без создани€ объекта.

Ќапомним, что факториал натурального числа n Ц это произведение всех натуральных чисел от 1 до n:

n!=1Ј2ЈЕЈ(n-1)Јn

 роме того, 0! считаетс€ равным 1. ќбозначение факториала в виде n! математическое, в Java символ У!Ф зарезервирован дл€ других целей. “акже написать подпрограммы вычислени€ факториала с другими типами возвращаемых значений:

public static long factorial_long(int n) и

public static int factorial_int(int n)

—равнить работу подпрограмм при n=0,1,5,10,20,50,100. ќбъ€снить результаты.

  • –азработать в пакете приложени€ библиотеку классов дл€ иерархии фигур. –еализаци€ должна быть с заглушками при реализации методов show и hide. ¬место показа на экране эти методы должны выводить в консольное окно вывода им€ класса фигуры и слово show или hide, а также координаты x и y фигуры.
  • –азработать приложение, в котором используютс€ эти классы Ц создаЄтс€ фигура нужного типа при нажатию на кнопку и Упоказываетс€Ф. —оздать документационные комментарии дл€ полей и методов разработанных классов. ¬ызвать генерацию документации дл€ проекта, просмотреть в ней созданные комментарии.
  • ѕроверить в исходном коде проекта справку, возникающую при вызовах figure. и dot., где эти переменные заданы как Figure figure и Dot dot.
  • —оздать пакет figures. — помощью средств рефакторинга переместить классы фигур в пакет figures.
  • — помощью средств Reverse Engineering создать UML-диаграммы классов и зависимостей классов дл€ разработанного пакета figures.

 





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2017-02-28; ћы поможем в написании ваших работ!; просмотров: 1027 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

¬елико ли, мало ли дело, его надо делать. © Ќеизвестно
==> читать все изречени€...

2123 - | 1807 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.02 с.