diff options
Diffstat (limited to 'tde-i18n-ru/docs/kdesdk/umbrello')
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/Makefile.am | 4 | ||||
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/Makefile.in | 635 | ||||
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/authors.docbook | 46 | ||||
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/code_import_and_generation.docbook | 165 | ||||
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/credits.docbook | 11 | ||||
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/index.cache.bz2 | bin | 0 -> 18272 bytes | |||
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/index.docbook | 85 | ||||
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/introduction.docbook | 57 | ||||
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/other_features.docbook | 76 | ||||
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/uml_basics.docbook | 782 | ||||
-rw-r--r-- | tde-i18n-ru/docs/kdesdk/umbrello/working_with_umbrello.docbook | 397 |
11 files changed, 2258 insertions, 0 deletions
diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/Makefile.am b/tde-i18n-ru/docs/kdesdk/umbrello/Makefile.am new file mode 100644 index 00000000000..e8ff7c7b1b8 --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/Makefile.am @@ -0,0 +1,4 @@ +KDE_LANG = ru +SUBDIRS = $(AUTODIRS) +KDE_DOCS = AUTO +KDE_MANS = AUTO diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/Makefile.in b/tde-i18n-ru/docs/kdesdk/umbrello/Makefile.in new file mode 100644 index 00000000000..ef85b10b4f9 --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/Makefile.in @@ -0,0 +1,635 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# KDE tags expanded automatically by am_edit - $Revision: 483858 $ +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = docs/kdesdk/umbrello +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ +#>- html-recursive info-recursive install-data-recursive \ +#>- install-dvi-recursive install-exec-recursive \ +#>- install-html-recursive install-info-recursive \ +#>- install-pdf-recursive install-ps-recursive install-recursive \ +#>- installcheck-recursive installdirs-recursive pdf-recursive \ +#>- ps-recursive uninstall-recursive +#>+ 7 +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +#>+ 1 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CONF_FILES = @CONF_FILES@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +GMSGFMT = @GMSGFMT@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDECONFIG = @KDECONFIG@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_RPATH = @KDE_RPATH@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TOPSUBDIRS = @TOPSUBDIRS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +X_RPATH = @X_RPATH@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +am__leading_dot = @am__leading_dot@ +am__tar = @am__tar@ +am__untar = @am__untar@ +#>- bindir = @bindir@ +#>+ 2 +DEPDIR = .deps +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libs_htmldir = @kde_libs_htmldir@ +kde_libs_prefix = @kde_libs_prefix@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +kdeinitdir = @kdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ +KDE_LANG = ru +#>- SUBDIRS = $(AUTODIRS) +#>+ 1 +SUBDIRS =. +KDE_DOCS = AUTO +KDE_MANS = AUTO +#>- all: all-recursive +#>+ 1 +all: docs-am all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +#>- @for dep in $?; do \ +#>- case '$(am__configure_deps)' in \ +#>- *$$dep*) \ +#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ +#>- && exit 0; \ +#>- exit 1;; \ +#>- esac; \ +#>- done; \ +#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/kdesdk/umbrello/Makefile'; \ +#>- cd $(top_srcdir) && \ +#>- $(AUTOMAKE) --gnu docs/kdesdk/umbrello/Makefile +#>+ 12 + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/kdesdk/umbrello/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/kdesdk/umbrello/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/kdesdk/umbrello/Makefile.in +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +#>- distdir: $(DISTFILES) +#>+ 1 +distdir: distdir-nls $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +#>- uninstall: uninstall-recursive +#>+ 1 +uninstall: uninstall-docs uninstall-nls uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +#>- clean: clean-recursive +#>+ 1 +clean: kde-rpo-clean clean-recursive + +#>- clean-am: clean-generic mostlyclean-am +#>+ 1 +clean-am: clean-docs clean-bcheck clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +#>- install-data-am: +#>+ 1 +install-data-am: install-docs install-nls + +install-dvi: install-dvi-recursive + +install-exec-am: + +install-html: install-html-recursive + +install-info: install-info-recursive + +install-man: + +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic ctags \ + ctags-recursive distclean distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: + +#>+ 2 +KDE_DIST=uml_basics.docbook index.docbook credits.docbook code_import_and_generation.docbook index.cache.bz2 Makefile.in other_features.docbook introduction.docbook working_with_umbrello.docbook authors.docbook Makefile.am + +#>+ 24 +index.cache.bz2: $(srcdir)/index.docbook $(KDE_XSL_STYLESHEET) other_features.docbook code_import_and_generation.docbook index.docbook introduction.docbook credits.docbook working_with_umbrello.docbook uml_basics.docbook authors.docbook + @if test -n "$(MEINPROC)"; then echo $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; $(MEINPROC) --check --cache index.cache.bz2 $(srcdir)/index.docbook; fi + +docs-am: index.cache.bz2 + +install-docs: docs-am install-nls + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello + @if test -f index.cache.bz2; then \ + echo $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello/; \ + $(INSTALL_DATA) index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello/; \ + elif test -f $(srcdir)/index.cache.bz2; then \ + echo $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello/; \ + $(INSTALL_DATA) $(srcdir)/index.cache.bz2 $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello/; \ + fi + -rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello/common + $(LN_S) $(kde_libs_htmldir)/$(KDE_LANG)/common $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello/common + +uninstall-docs: + -rm -rf $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello + +clean-docs: + -rm -f index.cache.bz2 + + +#>+ 13 +install-nls: + $(mkinstalldirs) $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello + @for base in other_features.docbook code_import_and_generation.docbook index.docbook introduction.docbook credits.docbook working_with_umbrello.docbook uml_basics.docbook authors.docbook ; do \ + echo $(INSTALL_DATA) $$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello/$$base ;\ + $(INSTALL_DATA) $(srcdir)/$$base $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello/$$base ;\ + done + +uninstall-nls: + for base in other_features.docbook code_import_and_generation.docbook index.docbook introduction.docbook credits.docbook working_with_umbrello.docbook uml_basics.docbook authors.docbook ; do \ + rm -f $(DESTDIR)$(kde_htmldir)/$(KDE_LANG)/umbrello/$$base ;\ + done + + +#>+ 5 +distdir-nls: + for file in other_features.docbook code_import_and_generation.docbook index.docbook introduction.docbook credits.docbook working_with_umbrello.docbook uml_basics.docbook authors.docbook ; do \ + cp $(srcdir)/$$file $(distdir); \ + done + +#>+ 15 +force-reedit: + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/kdesdk/umbrello/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/kdesdk/umbrello/Makefile + cd $(top_srcdir) && perl ../scripts/admin/am_edit -p../scripts/admin docs/kdesdk/umbrello/Makefile.in + + +#>+ 21 +clean-bcheck: + rm -f *.bchecktest.cc *.bchecktest.cc.class a.out + +bcheck: bcheck-recursive + +bcheck-am: + @for i in ; do \ + if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \ + echo "int main() {return 0;}" > $$i.bchecktest.cc ; \ + echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \ + echo "$$i"; \ + if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \ + rm -f $$i.bchecktest.cc; exit 1; \ + fi ; \ + echo "" >> $$i.bchecktest.cc.class; \ + perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \ + rm -f a.out; \ + fi ; \ + done + + +#>+ 3 +final: + $(MAKE) all-am + +#>+ 3 +final-install: + $(MAKE) install-am + +#>+ 3 +no-final: + $(MAKE) all-am + +#>+ 3 +no-final-install: + $(MAKE) install-am + +#>+ 3 +kde-rpo-clean: + -rm -f *.rpo + +#>+ 3 +nmcheck: +nmcheck-am: nmcheck diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/authors.docbook b/tde-i18n-ru/docs/kdesdk/umbrello/authors.docbook new file mode 100644 index 00000000000..ca550bda7ec --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/authors.docbook @@ -0,0 +1,46 @@ +<chapter id="authors"> +<title +>Авторы и история</title> +<para +>Этот проект был запущен Полом Хенсгеном (Paul Hensgen), как один из его университетских проектов. Оригинальным именем приложения было <application +>UML Modeller</application +>. Пол вёл разработку до конца 2001 года, когда программа достигла версии 1.0. </para> +<para +>Версия 1.0 уже предоставляет широкую функциональность, но после того, как проект был рассмотрен в университете Пола, другие разработчики смогли присоединиться к проекту и начали вносить значительный вклад в <application +>UML Modeller</application +>, например, переход от файлов бинарного формата к XML, поддержка большего количества типов диаграмм UML, генерация кода и импортирование кода. </para> +<para +>Пол вынужден был отойти от команды разработки летом 2002, но, будучи свободным и открытым программным обеспечением, программа продолжала улучшаться и расти, поддерживаемая группой разработчиков из разных частей мира. В сентябре 2002 проект изменил своё имя с <application +>&UML; Modeller</application +> на &umbrello;. Существует несколько причин для смены имени, наиболее важным из них было то, что <quote +>uml</quote +> является слишком общераспространённым именем и вызывает проблемы с некоторыми дистрибутивами. Другой важной причиной являлось то, что разработчики думают, что <application +>Umbrello</application +> — более симпатичное имя. </para> +<para +>Разработка &umbrello;, как и дискуссии о развитии программы в будущих версиях, открыта и ведётся через Интернет. Если вы желаете внести свой вклад в проект, свяжитесь с разработчиками. Существует много вариантов помощи проекту: </para> +<itemizedlist> +<listitem +><para +>Отчёт об ошибках или предложения по усовершенствованию программы</para +></listitem> +<listitem +><para +>Исправление ошибок и добавление возможностей</para +></listitem> +<listitem +><para +>Создание хорошей документации или перевод её на другие языки</para +></listitem> +<listitem +><para +>И конечно, программирование вместе с нами!</para +></listitem> +</itemizedlist> +<para +>Как вы видите, есть много способов внести свой вклад в проект. Любой вклад очень важен, и каждый приглашается к участию в проекте. </para> +<para +>С разработчиками &umbrello; можно связаться по адресу <email +>uml-devel@lists.sourceforge.net</email +>. </para> +</chapter> diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/code_import_and_generation.docbook b/tde-i18n-ru/docs/kdesdk/umbrello/code_import_and_generation.docbook new file mode 100644 index 00000000000..40f2382780b --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/code_import_and_generation.docbook @@ -0,0 +1,165 @@ +<chapter id="code-import-generation"> +<title +>Импорт и генерация кода</title> +<para +>&umbrello; является средством &UML;-моделирования, и его главной целью является помощь в <emphasis +>анализе и проектировании</emphasis +> ваших систем. Тем не менее, для перехода от вашего проекта к его <emphasis +>реализации</emphasis +>, &umbrello; позволяет вам сгенерировать исходный код для различных языков программирования . Если вам понадобится использовать &UML; для существующего проекта на C++, &umbrello; может помочь в создании модели вашей системы на основе исходного кода, с помощью его анализа и импорта обнаруженных классов. </para> +<sect1 id="code-generation"> +<title +>Генерация кода</title> +<para +>&umbrello; может генерировать исходный код для различных языков программирования на основе вашей модели &UML;, помогая вам начать реализацию вашего проекта. Сгенерированный код состоит из объявлений классов с их методами и атрибутами, вам остаётся только <quote +>заполнить пустые места</quote +> для реализации функциональности вашего класса. </para> +<para +>&umbrello; 1.2 поставляется с поддержкой генерации кода для ActionScript, Ada, C++, CORBA IDL, &Java;, JavaScript, <acronym +>PHP</acronym +>, Perl, Python, SQL и XMLSchema. </para> +<sect2 id="generate-code"> +<title +>Генерация кода</title> +<para +>Для генерации кода с помощью &umbrello; вам сперва необходимо создать или загрузить модель, содержащую хотя бы один класс. При необходимости работы с исходным кодом выберите элемент <guimenuitem +>Мастер генерации кода</guimenuitem +> меню <guimenuitem +>Код</guimenuitem +> для запуска мастера, который проведёт вас через процесс генерации кода. </para> +<para +>Первым шагом будет указание классов, для которых требуется сгенерировать код. По умолчанию выбираются все классы вашей модели, вы имеете возможность убрать выделение с ненужных классов, перемещая их на левую сторону списка. </para> +<para +>Следующим шагом будет модификация параметров генератора кода. Доступны следующие опции: </para> +<para> +<screenshot> +<screeninfo +>Опции генерации кода</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="generation-options.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Опции для генерации кода в &umbrello;</phrase> + </textobject> + <caption> + <para +>Опции для генерации кода в &umbrello; </para> + </caption> + </mediaobject> +</screenshot> +</para> +<sect3 id="generation-options"> +<title +>Опции генерации</title> +<!-- LW; to rearrange --> + +<sect4> +<title +>Автокомментирование кода</title> +<para +>В режиме <guilabel +>Записывать пустые комментарии</guilabel +> генератор кода будет писать комментарии вида /** тра-ля-ля */, даже если комментируемые блоки пустые. Если вы добавите документацию в классы, методы или атрибуты вашей модели, генератор кода запишет эти комментарии как документацию для <application +>Doxygen</application +> независимо от этой опции. Но если вы включили данную опцию, &umbrello; запишет блоки комментариев для всех классов, методов и атрибутов, даже если никакой документации в модели не было. В этом случае вам следует задокументировать ваши классы позднее прямо в исходном коде. </para> +<para +>Опция <guilabel +>Записывать комментарии для пустых секций</guilabel +> указывает &umbrello; записывать комментарии в исходный код для разграничения различных секций класса. Например, <quote +>public methods</quote +> или <quote +>Attributes</quote +> перед соответствующими секциями. Если вы включите данную опцию, &umbrello; будет записывать комментарии для всех секций класса, даже если некоторые из них будут пустыми. Например, будет записан комментарий <quote +>protected methods</quote +>, даже если в вашем классе нет методов, объявленных как <quote +>protected</quote +>. </para> +</sect4> +<sect4> +<title +>Каталоги</title> +<para +>Опция <guilabel +>Сохранять сгенерированные файлы в каталог</guilabel +>. Здесь вам следует указать каталог, куда &umbrello; поместит сгенерированный исходный код. </para> +<para +>Опция <guilabel +>Подключать заголовочные файлы из каталога</guilabel +> позволяет вам вставить заголовки в начало каждого сгенерированного файла. Заголовочные файлы могут содержать сведения об авторских правах или лицензии, а также переменные, вычисляемые во время генерации кода. Вы можете ознакомиться с заголовочными файлами, поставляемыми с &umbrello;, чтобы понять, как использовать эти переменные для указания вашего имени или текущей даты во время генерации кода. </para> +</sect4> +<sect4> +<title +>Правила перезаписи</title> +<!-- FIXME update for Umbrello 1.2's new C++ and Java code generators --> +<para +>Данная опция указывает Umbrello, что следует делать, если создаваемый файл уже существует. Umbrello <emphasis +>не может изменять существующие исходные файлы</emphasis +>, таким образом, вы должны выбрать между перезаписью существующего файла, отменой генерации конкретного файла или позволить Umbrello выбрать другое имя файла. Если вы предпочли выбрать другое имя файла, Umbrello добавит суффикс к текущему имени файла. </para> +</sect4> +<sect4> +<title +>Язык</title> +<para +>По умолчанию &umbrello; будет генерировать код на языке, который вы указали в качестве активного языка, но мастер генерации кода позволяет указать другой язык. </para> +</sect4> +</sect3 +><!--generation-options--> +<sect3 id="generation-wizard-generation"> +<title +>Мастер генерации</title> +<para +>Третий и последний шаг помощника показывает состояние процесса генерации кода. Вам надо только нажать на кнопку Сгенерировать, чтобы получить ваши классы в виде исходного кода. </para> +<para +>Следует отметить, что опции, которые вы выбрали в мастере генерации кода, верны только для текущего момента. При следующем запуске мастера вам потребуется заново указать все опции (каталог с заголовочными файлами, правила перезаписи и так далее). Можно настроить значения по умолчанию в разделе <guilabel +>Генерация кода</guilabel +> настроек Umbrello, доступной через <menuchoice +><guimenu +>Настройка</guimenu +> <guimenuitem +>Настроить Umbrello...</guimenuitem +></menuchoice +> </para> +<para +>Если вы настроили опции генерации кода и хотите сгенерировать код без использования помощника, можете выбрать <guimenuitem +>Генерировать весь код</guimenuitem +> из меню Код. При этом сгенерируется код для всех классов вашей модели с использованием текущих настроек (включая каталог назначения и правила перезаписи, так что будьте осторожны). </para> +</sect3> +</sect2 +><!--generate-code--> +</sect1 +> <!--code-generation--> +<sect1 id="code-import"> +<title +>Импорт кода</title> +<para +>Umbrello может импортировать исходный код ваших существующих проектов для помощи в построении моделей для ваших систем. &umbrello; 1.2 поддерживает исходный код на языке C++ , но поддержка других будет добавлена в будущих версиях. </para> +<para +>Для импортирования классов в вашу модель выберите <guimenuitem +>Импортировать классы...</guimenuitem +> из меню <guimenu +>Код</guimenu +>. В диалоге выбора файлов укажите файлы, содержащие объявления классов C++, и нажмите OK. Классы будут импортированы и появятся в виде элементов модели в дереве модели. Следует отметить, что Umbrello не создаёт никакой диаграммы для отображения ваших классов, они просто импортируются в модель, и вы можете их использовать при построении любых диаграмм. </para> +<para> +<screenshot> +<screeninfo +>Импорт кода</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="code-import.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Меню для импорта исходного кода в Umbrello</phrase> + </textobject> + <caption> + <para +>Меню для импорта исходного кода в Umbrello </para> + </caption> + </mediaobject> +</screenshot> +</para> +</sect1> +</chapter +> <!--code-import-generation--> diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/credits.docbook b/tde-i18n-ru/docs/kdesdk/umbrello/credits.docbook new file mode 100644 index 00000000000..399779fd6e7 --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/credits.docbook @@ -0,0 +1,11 @@ +<chapter id="copyright"> +<title +>Авторское право</title> + +<para +>Copyright 2001, Paul Hensgen</para> +<para +>Copyright 2002, 2003 авторы &umbrello;. Смотрите <ulink url="http://uml.sf.net/developers.php" +>http://uml.sf.net/developers.php</ulink +></para> +&underFDL; &underGPL; </chapter> diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/index.cache.bz2 b/tde-i18n-ru/docs/kdesdk/umbrello/index.cache.bz2 Binary files differnew file mode 100644 index 00000000000..f9993246361 --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/index.cache.bz2 diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/index.docbook b/tde-i18n-ru/docs/kdesdk/umbrello/index.docbook new file mode 100644 index 00000000000..149b2975a4a --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/index.docbook @@ -0,0 +1,85 @@ +<?xml version="1.0" ?> +<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" + "dtd/kdex.dtd" [ + <!ENTITY umbrello "<application +>Umbrello &UML; Modeller</application +>"> + <!ENTITY kappname "&umbrello;"> + <!ENTITY packagename "kdesdk"> + <!ENTITY UML "<acronym +>UML</acronym +>"> + <!ENTITY introduction-chapter SYSTEM "introduction.docbook"> + <!ENTITY uml-basics-chapter SYSTEM "uml_basics.docbook"> + <!ENTITY working-with-umbrello-chapter SYSTEM "working_with_umbrello.docbook"> + <!ENTITY code-import-and-generation-chapter SYSTEM "code_import_and_generation.docbook"> + <!ENTITY other-features-chapter SYSTEM "other_features.docbook"> + <!ENTITY authors-chapter SYSTEM "authors.docbook"> + <!ENTITY credits-chapter SYSTEM "credits.docbook"> + <!ENTITY % addindex "IGNORE"> + <!ENTITY % Russian "INCLUDE" +><!-- change language only here --> + <!-- Do not define any other entities; instead, use the entities + from kde-genent.entities and $LANG/user.entities. --> +]> + +<book id="Umbrello" lang="&language;"> +<bookinfo> +<title +>Руководство &umbrello;</title> + +<authorgroup> +<corpauthor +>Авторы &umbrello;</corpauthor> +</authorgroup> + +<copyright> +<year +>2001</year> +<holder +>Paul Hensgen</holder> +</copyright> +<copyright> +<year +>2002, 2003</year> +<holder +>Авторы &umbrello;</holder> +</copyright> + + +<date +>2003-10-15</date> +<releaseinfo +>1.2</releaseinfo> + +<abstract> +<para +>&umbrello; помогает в процессе разработки программного обеспечения, используя промышленный стандарт - язык UML (&UML;), предоставляя возможность создавать диаграммы для разработки и документирования ваших систем. </para> +</abstract> + +<keywordset> +<keyword +>KDE</keyword> +<keyword +>UML</keyword> +<keyword +>моделирование</keyword> +<keyword +>диаграммы</keyword> +<keyword +>разработка программного обеспечения</keyword> +<keyword +>разработка</keyword> +</keywordset> + +</bookinfo> + +&introduction-chapter; +¨-basics-chapter; +&working-with-umbrello-chapter; +&code-import-and-generation-chapter; +&other-features-chapter; +&authors-chapter; +&credits-chapter; + +</book> diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/introduction.docbook b/tde-i18n-ru/docs/kdesdk/umbrello/introduction.docbook new file mode 100644 index 00000000000..03030988664 --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/introduction.docbook @@ -0,0 +1,57 @@ +<chapter id="introduction"> +<title +>Введение</title> + +<para +>&umbrello; — это средство для работы с диаграммами &UML;, которое может быть полезным в процессе разработки программного обеспечения, особенно на стадиях анализа и проектирования. &umbrello; поможет вам создать высококачественный продукт. Также &UML; может быть использован для документирования проекта приложения. </para> +<para +>Хорошая модель вашего приложения является наилучшим способом взаимодействия с другими разработчиками, работающими над данным проектом, и с вашими заказчиками. Хорошая модель очень важна для средних и больших проектов, но также будет полезна и для небольших проектов. Даже если вы один работаете над маленьким проектом, хорошая модель предоставит вам общую картину разработки, что поможет вам сразу написать качественный код. </para> +<para +>&UML; является языком диаграмм, используемым для описания таких моделей. Вы можете выражать свои идеи в &UML; с помощью различных типов диаграмм. &umbrello; 1.2 поддерживает следующие типы диаграмм: </para> +<itemizedlist> +<listitem +><para +>Диаграмма класса</para +></listitem> +<listitem +><para +>Диаграмма последовательности</para +></listitem> +<listitem +><para +>Диаграмма взаимодействий</para +></listitem> +<listitem +><para +>Диаграмма вариантов использования</para +></listitem> +<listitem +><para +>Диаграмма состояний</para +></listitem> +<listitem +><para +>Диаграмма действий</para +></listitem> +<listitem +><para +>Диаграмма компонентов</para +></listitem> +<listitem +><para +>Диаграмма выпуска</para +></listitem> +</itemizedlist> +<para +>Более подробная информация по &UML; может быть найдена на сайте <ulink url="http://www.omg.org" +><acronym +>OMG</acronym +>, http://www.omg.org</ulink +>, создателя стандарта &UML;. </para> +<para +>Мы надеемся, что вам понравится &umbrello;, и что данный продукт поможет вам в разработке высококачественного программного обеспечения. &umbrello; является свободным программным обеспечением и предоставляется бесплатно. Единственное, о чем мы просим вас — это высылать отчёты о выявленных ошибках, проблемах или предложения разработчикам &umbrello; по адресу <email +>uml-devel@lists.sourceforge.net</email +> или через сайт<ulink url="http://bugs.kde.org" +>http://bugs.kde.org</ulink +>. </para> +</chapter> diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/other_features.docbook b/tde-i18n-ru/docs/kdesdk/umbrello/other_features.docbook new file mode 100644 index 00000000000..b8f0f04052e --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/other_features.docbook @@ -0,0 +1,76 @@ +<chapter id="other-features"> +<title +>Дополнительные возможности</title> +<sect1 +> +<title +>Дополнительные возможности &umbrello;</title> +<para +>В данной главе кратко освещаются некоторые дополнительные особенности &umbrello;.</para> +<sect2 id="copying-as-png"> +<title +>Копирование объектов в виде изображений в формате PNG</title> +<para +>Кроме стандартных действий вырезания, копирования и вставки, с помощью которых можно обмениваться объектами между диаграммами, &umbrello; может копировать объекты как картинки формата PNG, которые можно вставить в документы другого типа. Для этого надо просто выделить объект на диаграмме (класс, актёр и так далее) и скопировать его (<keycombo +>&Ctrl;<keycap +>C</keycap +></keycombo +>, или через контекстное меню), затем открыть документ &kword; (или любую другую программу, в документы которой можно вставлять изображения) и выбрать <guimenuitem +>Вставить</guimenuitem +>. Экспортирование элементов диаграммы в виде картинок — очень полезная возможность. </para> +</sect2> +<sect2 id="export-as-png"> +<title +>Экспортирование в виде изображения</title> +<para +>Также вы можете экспортировать целую диаграмму в виде картинки. Всё, что для этого потребуется — выделить диаграмму и выбрать элемент <guimenuitem +>Экспортировать как изображение...</guimenuitem +> из меню <guimenu +>Диаграмма</guimenu +>. </para> +</sect2> +<sect2 id="printing"> +<title +>Печать</title> +<para +>&umbrello; позволяет распечатывать отдельные диаграммы. Нажатие на кнопку <guiicon +>Печать</guiicon +> на панели инструментов приложения или выбор элемента <guimenuitem +>Печать</guimenuitem +> из меню <guimenu +>Файл</guimenu +> вызовет стандартный диалог печати &kde;, с помощью которого вы сможете распечатать ваши диаграммы. </para> +</sect2> +<sect2 id="logical-folders"> +<title +>Логические папки</title> +<para +>Для лучшей организации вашей модели, особенно для больших проектов, вы можете создавать логические папки в дереве модели. Просто выберите элемент <menuchoice +><guimenu +>Новый</guimenu +> <guimenuitem +>Каталог</guimenuitem +></menuchoice +> из контекстного меню стандартных каталогов дерева и создайте новую папку. Папки могут быть вложенными, и вы можете перемещать объекты, перетаскивая их мышкой из одной папки в другую. </para> + +<screenshot> +<screeninfo +>Организация вашей модели с помощью папок</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="folders.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Организация модели с помощью логических папок в &umbrello;</phrase> + </textobject> + <caption> + <para +>Организация модели с помощью логических папок в &umbrello; </para> + </caption> + </mediaobject> +</screenshot> + +</sect2> +</sect1> +</chapter> diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/uml_basics.docbook b/tde-i18n-ru/docs/kdesdk/umbrello/uml_basics.docbook new file mode 100644 index 00000000000..66664c0b653 --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/uml_basics.docbook @@ -0,0 +1,782 @@ +<chapter id="uml-basics"> +<title +>Основы &UML;</title> +<sect1 id="about-uml"> +<title +>О языке &UML;</title> +<para +>Данный раздел предоставит вам небольшой обзор основ &UML;. Он не является учебником по &UML;, и если вы хотите узнать побольше об &UML; или в целом о планировании разработки программного обеспечения, обратитесь к одной из многих книг по данной теме. В Интернете есть много учебных пособий, можете начать с них. </para> + +<para +>Унифицированный язык моделирования (&UML;) является языком диаграмм или обозначений для спецификации, визуализации и документации модели объектно-ориентированных программных систем. &UML; не является методом разработки, то есть он не определяет последовательность действий при разработке программного обеспечения. Он помогает описать свою идею и взаимодействовать с другими разработчиками системы. &UML; управляется Object Management Group (OMG) и является промышленным стандартом, описывающим модели программного обеспечения. </para> +<para +>&UML; создан для применения в разработке объектно-ориентированного программного обеспечения, и с некоторыми ограничениями может применяться для других парадигм программирования. </para> +<para +>&UML; состоит из множества модельных элементов, которые представляют различные компоненты разрабатываемой системы. Элементы &UML; используются для создания диаграмм, которые описывают определённую часть системы или точку зрения на неё. &umbrello; поддерживает следующие типы диаграмм: </para> + +<itemizedlist> + +<listitem +><para +><emphasis +><link linkend="use-case-diagram" +>Диаграммы вариантов использования</link +></emphasis +> отображают действующих лиц (людей или пользователей системы), варианты использования (сценарии использования системы) и их взаимодействие.</para +> </listitem> + +<listitem +><para +><emphasis +><link linkend="class-diagram" +>Диаграммы классов</link +></emphasis +> отображают классы и взаимодействие между ними.</para +> </listitem> + +<listitem +><para +><emphasis +><link linkend="sequence-diagram" +>Диаграммы последовательностей</link +></emphasis +> отображают объекты и их взаимодействие, выделяя хронологию обмена сообщениями между объектами.</para +> </listitem> + +<listitem +><para +><emphasis +><link linkend="collaboration-diagram" +>Диаграммы взаимодействия</link +></emphasis +> отображают объекты и их взаимодействие, выделяя объекты, которые участвуют в обмене сообщениями.</para> +</listitem> + +<listitem +><para +><emphasis +><link linkend="state-diagram" +>Диаграммы состояния</link +></emphasis +> отображают состояния, изменения состояний и события в объектах или компонентах системы.</para +> </listitem> + +<listitem +><para +><emphasis +><link linkend="activity-diagram" +>Диаграммы активности</link +></emphasis +> отображают активность, состояния и изменения состояний объектов, а также события, возникающие в компонентах системы.</para +></listitem> + +<listitem +><para +><emphasis +><link linkend="component-diagram" +>Диаграммы компонентов</link +></emphasis +> показывают компоненты верхнего уровня (такие как KParts или Java Beans).</para +></listitem> + +<listitem +><para +><emphasis +><link linkend="deployment-diagram" +>Диаграммы выпуска</link +></emphasis +> показывают экземпляры компонентов и их взаимоотношения.</para +></listitem +> + +</itemizedlist> + +</sect1 +> <!-- about-uml --> + +<sect1 id="uml-elements" +> +<title +>Элементы &UML;</title> +<sect2 id="use-case-diagram"> +<title +>Диаграмма вариантов использования</title> +<para +>Диаграммы вариантов использования описывают взаимоотношения и зависимости между группами <emphasis +>вариантов использования</emphasis +> и <emphasis +>действующих лиц</emphasis +>, участвующими в процессе.</para> +<para +>Важно понимать, что диаграммы вариантов использования не предназначены для отображения проекта и не могут описывать внутреннее устройство системы. Диаграммы вариантов использования предназначены для упрощения взаимодействия с будущими пользователями системы, с клиентами, и особенно пригодятся для определения необходимых характеристик системы. Другими словами, диаграммы вариантов использования говорят о том, <emphasis +>что</emphasis +> система должна делать, не указывая <emphasis +>сами</emphasis +> применяемые методы.</para> +<para> +<screenshot> +<screeninfo +>Пример диаграммы вариантов использования.</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="use-case-diagram.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Диаграмма вариантов использования</phrase> + </textobject> + <caption> + <para +>Диаграмма вариантов использования </para> + </caption> + </mediaobject> +</screenshot> +</para> +<sect3 id="use-case"> +<title +>Вариант использования</title> +<para +><emphasis +>Вариант использования</emphasis +> описывает, с точки зрения действующего лица, группу действий в системе, которые приводят к конкретному результату.</para> +<para +>Варианты использования являются описаниями типичных взаимодействий между пользователями системы и самой системой. Они отображают внешний интерфейс системы и указывают форму того, что система должна сделать (именно что, а не как). </para> +<para +>При работе с вариантами использования важно помнить несколько простых правил: <itemizedlist> + <listitem +><para +>Каждый вариант использования относится как минимум к одному действующему лицу</para +></listitem> + <listitem +><para +>Каждый вариант использования имеет инициатора</para +></listitem> + <listitem +><para +>Каждый вариант использования приводит к соответствующему результату (результату с <quote +>бизнес-значением</quote +>).</para> + </listitem> + </itemizedlist> +</para> +<para +>Варианты использования также могут взаимодействовать с другими вариантами использования. Три наиболее часто встречающихся типа взаимодействия между вариантами использования приведены ниже:</para> +<itemizedlist> +<listitem +><para +><emphasis +><<включение>></emphasis +> указывает, что вариант использования встраивается <emphasis +>в</emphasis +> другой вариант использования;</para +></listitem> +<listitem +><para +><emphasis +><<добавление>></emphasis +> указывает, что в определённых ситуациях или в некоторой точке (называемой точкой расширения) вариант использования будет расширен другим;</para +></listitem> +<listitem +><para +><emphasis +><<обобщение>></emphasis +> указывает, что вариант использования наследует характеристики <quote +>родительского</quote +> варианта использования и может переопределить некоторые из них или добавить новые, подобно наследованию в классах. </para> +</listitem> +</itemizedlist> +</sect3> +<sect3 id="actor"> +<title +>Действующее лицо</title> +<para +>Действующее лицо является внешним источником (не элементом системы), который взаимодействует с системой через вариант использования. Действующие лица могут быть как реальными людьми (например, пользователями системы), так и другими компьютерными системами или внешними событиями. </para> +<para +>Действующие лица представляют не <emphasis +>физических</emphasis +> людей или системы, а их <emphasis +>роли</emphasis +>. Эти означает, что когда человек взаимодействует с системой различными способами (предполагая различные роли), он отображается несколькими действующими лицами. Например, человек, работающий в службе поддержки и принимающий от клиентов заказы, будет отображаться в системе как <quote +>участник отдела поддержки</quote +> и <quote +>участник отдела продаж</quote +>. </para> +</sect3> +<sect3 id="use-case-description"> +<title +>Описание варианта использования</title> +<para +>Описания вариантов использования являются текстовыми пояснениями варианта использования. Они обычно принимают форму заметки или документа, который каким-то образом прикрепляется к варианту использования и описывает процесс или активность, который имеет место быть в варианте использования. </para> +</sect3> +</sect2 +> <!-- use-case-diagram --> + +<sect2 id="class-diagram"> +<title +>Диаграмма класса</title> +<para +>Диаграммы классов отображают различные классы, из которых состоит система, и их взаимодействие между собой. Диаграммы классов являются <quote +>статичными</quote +> диаграммами, потому что они отображают классы вместе с их методами и атрибутами, так же как и статические взаимодействия между ними: какие классы <quote +>знают</quote +> о каких классах или какие классы <quote +>являются частью</quote +> других классов, но не отображают обмен сообщениями между классами. </para> +<para> +<screenshot> +<screeninfo +>Пример диаграммы класса</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="class-diagram.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Диаграмма класса</phrase> + </textobject> + <caption> + <para +>Диаграмма класса </para> + </caption> + </mediaobject> +</screenshot> +</para> +<sect3 id="class"> +<title +>Класс</title> +<para +>Класс определяет атрибуты и методы набора объектов. Все объекты класса (называемые экземплярами) имеют одинаковое поведение и одинаковый набор атрибутов (у каждого объекта - собственный набор атрибутов). Иногда вместо класса используется термин <quote +>тип</quote +>, но важно понимать, что эти термины неодинаковы. Термин <quote +>Тип</quote +> имеет более общий смысл. </para> +<para +>В &UML; классы представлены прямоугольниками с именем класса, которые могут отображать атрибуты и операции класса, помещённые внутри прямоугольника. </para> +<para> +<screenshot> +<screeninfo +>Класс в &UML;</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="class.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Визуальное представление класса в &UML;</phrase> + </textobject> + <caption> + <para +>Визуальное представление класса в &UML; </para> + </caption> + </mediaobject> +</screenshot> +</para> +<sect4 id="attribute"> +<title +>Атрибуты</title> +<para +>В &UML; атрибуты отображаются как минимум их названием, но также могут показывать свой тип, начальное значение и другие свойства. Атрибуты также могут отображаться с указанием их области видимости: </para> +<itemizedlist> +<listitem +><para +><literal +>+</literal +> отмечает <emphasis +>public</emphasis +> атрибуты;</para +></listitem> +<listitem +><para +><literal +>#</literal +> отмечает <emphasis +>protected</emphasis +> атрибуты;</para +></listitem> +<listitem +><para +><literal +>-</literal +> отмечает <emphasis +>private</emphasis +> атрибуты.</para +></listitem> +</itemizedlist> +</sect4> +<sect4 id="operation"> +<title +>Методы</title> +<para +>Методы (операции) также отображаются как минимум их названием, но также могут показывать свои параметры и возвращаемый тип. Подобно атрибутам, методы имеют область видимости: <itemizedlist> +<listitem +><para +><literal +>+</literal +> отмечает <emphasis +>public</emphasis +> операции;</para +></listitem> +<listitem +><para +><literal +>#</literal +> отмечает <emphasis +>protected</emphasis +> операции;</para +></listitem> +<listitem +><para +><literal +>-</literal +> отмечает <emphasis +>private</emphasis +> операции.</para +></listitem> +</itemizedlist> +</para> +</sect4> + +<sect4 id="templates"> +<title +>Шаблоны</title> +<para +>Классы могут иметь шаблоны, значение которых используется для неуказанного класса или типа. Тип шаблона указывается при инициализации класса (то есть, при создании объекта). Шаблоны используются в современном C++ и будут введены в Java 1.5, где будут обозначаться как Generics. </para> +</sect4> +</sect3> + +<sect3 id="class-associations"> +<title +>Ассоциации классов</title> +<para +>Классы могут взаимодействовать друг с другом различными способами:</para> +<sect4 id="generalization"> +<title +>Обобщение</title> +<para +>Наследование является основной концепцией объектно-ориентированного программирования, в которой класс <quote +>получает</quote +> все атрибуты и методы наследуемого класса и может переопределять/модифицировать некоторые из них, имея возможность добавлять собственные атрибуты и методы.</para> +<para +>В &UML; ассоциация <emphasis +>обобщения</emphasis +> между двумя классами помещает их в иерархию, представляющую концепцию наследования производного класса от базового. В &UML; обобщения отображаются в виде линии, соединяющей два класса, со стрелочкой у базового класса. <screenshot> +<screeninfo +>Обобщение</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="generalization.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Визуальное представление обобщения в &UML;</phrase> + </textobject> + <caption> + <para +>Визуальное представление обобщения в &UML; </para> + </caption> + </mediaobject> +</screenshot> +</para> +</sect4> + +<sect4 id="uml-associations"> +<title +>Ассоциации</title> +<para +>Ассоциации отображают взаимодействия между классами и определяют общую семантику и структуру многих типов <quote +>связей</quote +> между объектами.</para> +<para +>Ассоциации являются механизмом, который позволяет объектам взаимодействовать с друг другом. Они описывают связи между различными классами (связи между объектами называются соединениями объектов или <emphasis +>ссылками</emphasis +>. </para> +<para +>Ассоциации могут иметь роль, которая определяет назначение ассоциации и может быть одно- или двунаправленной, показывая, могут ли взаимодействующие объекты обмениваться сообщениями, или только один объект может отсылать сообщения. Каждый конец ассоциации имеет описание множественности, которое указывает, какое количество объектов на этой стороне ассоциации может взаимодействовать с одним объектом на другой стороне. </para> +<para +>В &UML; ассоциации отображаются в виде линии, соединяющей взаимодействующие классы, и могут показывать роль и количество объектов с каждой стороны. Множественность отображается в виде диапазона [мин..макс] неотрицательных значений, звёздочка (<literal +>*</literal +>) в качестве максимального значения обозначает бесконечность. <screenshot> +<screeninfo +>&UML;-ассоциации</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="association.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Визуальное представление ассоциации в &UML;</phrase> + </textobject> + <caption> + <para +>Визуальное представление ассоциации в &UML; </para> + </caption> + </mediaobject> +</screenshot> +</para> +</sect4> + +<sect4 id="aggregation"> +<title +>Объединение</title> +<para +>Объединения являются специальным типом ассоциаций, в котором два участвующих класса не равнозначны по статусу, но создают взаимодействие типа <quote +>часть-целое</quote +>. Объединение описывает, как класс, играющий роль целого, создаётся из других классов, играющих роль частей. Для объединений класс, выступающий в роли целого, всегда имеет множественность, равную единице. </para> +<para +>В &UML; объединения отображаются в виде линии с ромбом на стороне целого, соединяющей взаимодействующие классы. <screenshot> +<screeninfo +>Объединение</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="aggregation.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Визуальное представление объединения в &UML;</phrase> + </textobject> + <caption> + <para +>Визуальное представление объединения в &UML; </para> + </caption> + </mediaobject> +</screenshot> +</para> +</sect4> +<sect4 id="composition"> +<title +>Композиция</title> +<para +>Композиция является ассоциацией, которая представляет <emphasis +>очень тесное</emphasis +> объединение. Это означает, что Композиция формирует взаимодействия типа <quote +>часть-целое</quote +>, но эти взаимодействия настолько сильные, что части не могут существовать сами по себе. Они существуют только внутри целого, и при уничтожении целого уничтожаются и части.</para> +<para +>В &UML; композиции отображаются в виде линии с закрашенным ромбом на стороне целого, соединяющей взаимодействующие классы. </para> +<para +><screenshot> +<screeninfo +>Композиция</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="composition.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Визуальное представление композиции в &UML;</phrase> + </textobject> + </mediaobject> +</screenshot +></para> +</sect4> +</sect3 +> <!--class-associations--> + +<sect3 id="other-class-diagram-items"> +<title +>Другие элементы диаграммы класса</title> +<para +>Диаграммы классов могут содержать другие элементы внутри классов.</para> +<sect4 id="interfaces"> +<title +>Интерфейсы</title> +<para +>Интерфейсы являются абстрактными классами, следовательно, объекты данных классов не могут быть созданы напрямую. Они могут содержать методы, но не атрибуты. Классы могут наследоваться от интерфейсов (через ассоциацию реализации), и полученные объекты затем могут использоваться при составлении диаграмм.</para> +<!-- FIXME screenshot --> +</sect4> +<sect4 id="datatype"> +<title +>Типы данных</title> +<para +>Типы данных являются примитивами, которые обычно встроены в язык программирования. Яркими примерами могут служить целые и логические типы. Они могут не иметь отношения к классам, но классы могут использовать их.</para> +<!-- FIXME screenshot --> +</sect4> +<sect4 id="enum"> +<title +>Перечисления</title> +<para +>Перечисления представляют собой простой список значений. Примером перечисления является перечисление дней недели. Подобно типам данных, они могут использоваться в классах.</para> +<!-- FIXME screenshot --> +</sect4> +<sect4 id="package"> +<title +>Пакеты</title> +<para +>Пакеты представляют собой пространства имён в языке программирования. В диаграмме они используются для представления частей системы, которые содержат более одного класса (число классов может превышать несколько сотен).</para> +<!-- FIXME screenshot --> +</sect4> +</sect3> + +</sect2 +> <!-- class diagram --> + +<sect2 id="sequence-diagram"> +<title +>Диаграммы последовательностей</title> + +<para +>Диаграммы последовательностей показывают обмен сообщениями (то есть вызовы методов) между различными объектами в специфической, ограниченной по времени, ситуации. Диаграммы последовательностей специально выделяют порядок и времена отсылки сообщений объектам.</para> + +<para +>В диаграммах последовательностей объекты представляются вертикальными прерывистыми линиями с именем объекта наверху. Временная ось также направлена сверху вниз. Таким образом, сообщения, посылаемые от одного объекта к другому, отображаются стрелками с указанием операции и параметров. </para> + +<!-- FIXME update screenshot to show synchronous messages --> +<screenshot> +<screeninfo +>Диаграмма последовательности</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="sequence-diagram.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Диаграмма последовательности</phrase> + </textobject> + <caption> + <para +>Диаграмма последовательности </para> + </caption> + </mediaobject> +</screenshot> + +<para +>Сообщения могут быть либо синхронными, когда управление передаётся вызываемому объекту вплоть до момента окончания его работы, либо асинхронными, когда управление сразу же возвращается вызывающему объекту. Синхронные сообщения обозначаются вертикальным прямоугольником на стороне вызываемого объекта для отображения передачи управления в программе.</para> +</sect2 +> <!-- sequence diagrams --> + +<sect2 id="collaboration-diagram"> +<title +>Диаграммы взаимодействий</title> + +<para +>Диаграммы взаимодействий показывают взаимодействия между объектами, участвующими в конкретной ситуации. Это более или менее повторяет информацию, отображаемую диаграммами последовательностей, но там основной упор делается на то, как взаимодействия проявляются во времени, а здесь выделяются связи между объектами и их топологией.</para> + +<para +>На диаграммах взаимодействий сообщения, пересылаемые от одного объекта к другому, представляются в виде стрелок с указанием имени, параметров и последовательности сообщений. Диаграммы взаимодействий наиболее удачно подходят для отображения процесса работы программы или какой-либо ситуации, а также является лучшим типом диаграмм для демонстрации или объяснения какого-либо процесса в логике программы. </para> + +<screenshot> +<screeninfo +>Взаимодействие</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="collaboration-diagram.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Диаграмма взаимодействия</phrase> + </textobject> + <caption> + <para +>Диаграмма взаимодействия </para> + </caption> + </mediaobject> +</screenshot> + +</sect2 +> <!-- collaboration diagrams --> + +<sect2 id="state-diagram"> +<title +>Диаграмма состояния</title> +<para +>Диаграммы состояний показывают различные состояния объекта в течение его времени жизни и причины, вызывающие их смену. </para +> +<para +>Диаграммы состояний рассматривают объекты как <emphasis +>конечные автоматы</emphasis +>, которые могут быть в одном из нескольких конечных состояний. Конечные состояния могут изменяться с помощью конечного набора причин. Например, объект типа <emphasis +>NetServer</emphasis +> может находиться в одном из следующих состояний: </para> +<itemizedlist> +<listitem +><para +>Готовность</para +></listitem> +<listitem +><para +>Ожидание</para +></listitem> +<listitem +><para +>Обработка</para +></listitem> +<listitem +><para +>Остановка</para +></listitem> +</itemizedlist> +<para +>а события, которые могут привести к смене объектом своего состояния, это:</para> +<itemizedlist> +<listitem +><para +>Создание объекта</para +></listitem> +<listitem +><para +>Объект принял ожидаемое сообщение</para +></listitem> +<listitem +><para +>Клиент запросил соединение по сети</para +></listitem> +<listitem +><para +>Клиент прервал запрос</para +></listitem> +<listitem +><para +>Запрос выполнен</para +></listitem> +<listitem +><para +>Объект получил завершающее сообщение</para +></listitem> +<listitem +><para +>и так далее</para +></listitem> +</itemizedlist> +<para> +<screenshot> +<screeninfo +>Диаграмма состояния</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="state-diagram.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Диаграмма состояния</phrase> + </textobject> + <caption> + <para +>Диаграмма состояния </para> + </caption> + </mediaobject> +</screenshot> +</para> +<sect3 id="state"> +<title +>Состояние</title> +<para +>Состояния являются ключевыми элементами диаграмм состояний. Состояния принадлежат ровно одному классу и представляют собой совокупность значений, которые могут принимать атрибуты класса. В &UML; состояние описывает внутреннее состояние объекта одного определённого класса. </para +> +<para +>Следует отметить, что не стоит отображать на диаграмме состояний все состояния, отображайте только важные состояния, которые значительно влияют на работу объекта.</para> +<para +>Существуют два особых типа состояний: начало и конец. И вот почему: нет такого события, которое заставит объект возвратиться в состояние начало, если он из него вышел; нет такого события, которое заставит объект выйти из состояния конец, если он в него вошёл. </para> +</sect3> + +</sect2 +> <!-- state diagrams --> + +<sect2 id="activity-diagram"> +<title +>Диаграмма действий</title> +<para +>Диаграммы действий описывают последовательность действий в системе с помощью действий. Диаграммы действий являются специальной формой диаграмм состояний, только в основном содержат действия. </para> +<para> +<screenshot> +<screeninfo +>Пример диаграммы действий</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="activity-diagram.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Диаграмма действий</phrase> + </textobject> + <caption> + <para +>Диаграмма действий </para> + </caption> + </mediaobject> +</screenshot> +</para> +<para +>Диаграммы действий подобны процедурным диаграммам потока, с той разницей, что все действия напрямую присоединены к объектам.</para> + +<para +>Диаграммы действий всегда ассоциируются с <emphasis +>классами</emphasis +>, <emphasis +>методами</emphasis +> или <emphasis +>вариантами действий</emphasis +>.</para> + +<para +>Диаграммы действий поддерживают как последовательные, так и параллельные действия. Параллельное выполнение представляется с помощью пиктограмм Fork/Wait. Для действий, выполняющихся параллельно, порядок, в котором они выполняются, не имеет значения (они могут выполняться одновременно или друг за другом).</para> +<sect3 id="activity"> +<title +>Действие</title> +<para +>Действие представляет собой один шаг процесса. Одно действие представляет одно состояние системы с внутренним действием и, как минимум, с одним результатом действия. Действия могут иметь более одного результата, если они происходят при разных условиях. </para +> +<para +>Действия могут формировать иерархию, это означает, что действие может быть составлено из нескольких <quote +>мелких</quote +> действий. В этом случае входящие и исходящие переходы должны соответствовать входящим и исходящим переходам на детализированной диаграмме. </para> + +</sect3> +</sect2 +> <!-- activity diagram --> + +<sect2 id="helper-elements"> +<title +>Вспомогательные элементы</title> +<para +>Существует несколько вспомогательных элементов в &UML;, которые не имеют реального семантического значения для модели, но помогают внести ясность в диаграмму. Перечислим их: </para> +<itemizedlist> +<listitem +><para +>Текстовые строки</para +></listitem> +<listitem +><para +>Текстовые заметки и якоря</para +></listitem> +<listitem +><para +>Контейнеры</para +></listitem> +</itemizedlist +> +<para +>Текстовые строки удобно использовать для добавления краткой текстовой информации в диаграмму, это свободно прикрепляемый текст, который ничего не значит для модели. </para +> + +<para +>Текстовые заметки следует использовать для добавления более детальной информации об объекте или о специфической ситуации. Текстовые заметки могут быть прикреплены к элементам &UML;. </para> + +<para +>Контейнеры являются свободными прямоугольниками, которые могут быть использованы для группирования элементов диаграмм. Они не несут никакой смысловой нагрузки для модели.</para> + +<!-- FIXME, screenshot --> +</sect2 +> <!-- helper elements --> + +<sect2 id="component-diagram"> +<title +>Диаграммы компонентов</title> +<para +>Диаграммы компонентов отображают компоненты программного обеспечения (компонентные технологии, такие как KParts, CORBA или Java Beans или просто разделы системы, ясно отличающиеся друг от друга) и сущности, из которых они возникли, например, файлы с исходным кодом, библиотеки или таблицы баз данных.</para> + +<para +>Компоненты обладают интерфейсами (то есть абстрактными классами с методами), которые позволяют создавать ассоциации между компонентами.</para> +</sect2> + +<sect2 id="deployment-diagram"> +<title +>Диаграммы выпуска</title> + +<para +>Диаграммы выпуска отображают объекты, созданные во время выполнения программы, и их ассоциации. Они включают в себя узлы, которые являются физическими ресурсами, обычно одиночными компьютерами. Они также отображают интерфейсы и объекты.</para> + +</sect2> + +</sect1 +> +</chapter> diff --git a/tde-i18n-ru/docs/kdesdk/umbrello/working_with_umbrello.docbook b/tde-i18n-ru/docs/kdesdk/umbrello/working_with_umbrello.docbook new file mode 100644 index 00000000000..e6c98e3a3e7 --- /dev/null +++ b/tde-i18n-ru/docs/kdesdk/umbrello/working_with_umbrello.docbook @@ -0,0 +1,397 @@ +<chapter id="working-with-umbrello"> +<title +>Работа в &umbrello;</title> +<!-- Umbrello basics: creating diagrams, creating classes, adding objects to diagrams, + associations, editing properties, anchor points in associations, removing objects, removing + diagrams +--> + +<para +>Данная глава познакомит вас с пользовательским интерфейсом &umbrello; и расскажет всё, что необходимо знать для моделирования. Все действия в &umbrello; доступны через меню и панели инструментов, но &umbrello; также интенсивно использует контекстное меню. Вы можете нажать правую кнопку мыши практически на любом элементе рабочей области &umbrello; или дерева модели для вызова меню с наиболее полезными функциями, которые могут применяться к данному элементу. Некоторые пользователи найдут это немного неудобным в начале своей работы, потому что они чаще используют меню или панели инструментов, но впоследствии не смогут не согласиться, что данный метод значительно увеличивает скорость работы. </para> + +<sect1 id="user-interface"> +<title +>Пользовательский интерфейс</title> +<para +>Главное окно &umbrello; делится на три области, которые предоставляют полный обзор системы и быстрый доступ к различным диаграммам при работе над моделью. </para> +<para +>Перечислим эти области:</para> +<itemizedlist> +<listitem +><para +>Дерево модели</para +></listitem> +<listitem +><para +>Рабочая область</para +></listitem> +<listitem +><para +>Окно документации</para +></listitem> +</itemizedlist> + +<screenshot> +<screeninfo +>Интерфейс пользователя &umbrello;</screeninfo> + <mediaobject> + <imageobject> + <imagedata fileref="umbrello-ui.png" format="PNG"/> + </imageobject> + <textobject> + <phrase +>Интерфейс пользователя &umbrello;</phrase> + </textobject> + <caption> + <para +>Интерфейс пользователя &umbrello; </para> + </caption> + </mediaobject> +</screenshot> + +<sect2 id="tree-view"> +<title +>Дерево модели</title> +<para +>Дерево модели располагается в левом верхнем углу окна приложения и отображает все диаграммы, классы, действующие лица и варианты действий, которые составляют модель. Дерево модели даёт обзор разрабатываемой модели в целом, одновременно позволяя быстрое переключение между элементами модели и возможность размещения элементов модели на текущей диаграмме. </para> +<para +>Если вы работаете над моделью с несколькими классами и диаграммами, дерево модели поможет вам организовать элементы вашей модели с помощью папок. Папки можно создавать с помощью контекстного меню и затем перемещать в них элементы дерева модели, просто перетаскивая их мышкой. </para> +</sect2> + +<sect2 id="documentation-window"> +<title +>Окно документации</title> +<para +>Окно документации расположено в левом нижнем углу &umbrello; и предоставляет краткую информацию о выделенном объекте. Окно документации специально сделано небольшим, чтобы просматривать информацию по объекту, не занимая много места на экране. Если понадобиться просмотреть более подробную документацию по элементу, то следует перейти к свойствам элемента с помощью контекстного меню. </para> +</sect2> +<sect2 id="work-area"> +<title +>Рабочая область</title> +<para +>Рабочая область — это основное окно приложения, в котором происходит вся работа с диаграммами модели. Рабочая область отображает текущую активную диаграмму. В одно время может отображаться только одна диаграмма. </para> +</sect2> +</sect1 +> <!--user-interface--> +<sect1 id="load-save"> +<title +>Создание, загрузка и сохранение моделей</title> +<para +>Первое, что необходимо сделать для работы в &umbrello; – это создать новую модель. При запуске &umbrello; автоматически загружает последнюю использованную модель или создаёт новую, пустую модель (данное поведение зависит от настроек &umbrello;). </para> +<sect2 id="new-model"> +<title +>Новая модель</title> +<para +>Для создания новой модели необходимо выбрать элемент <guimenuitem +>Новый</guimenuitem +> из меню <guimenu +>Файл</guimenu +> или просто нажать на иконку <guiicon +>Новый</guiicon +> на панели инструментов. Если в это время вы уже работали с какой-либо моделью и не сохранили изменения, то &umbrello; предложит вам их сохранить. </para> +</sect2> +<sect2 id="save-model"> +<title +>Сохранение модели</title> +<para +>Вы можете сохранить модель в любое время с помощью элемента <guimenuitem +>Сохранить</guimenuitem +> из меню <guimenu +>Файл</guimenu +> или с помощью нажатия на иконку <guiicon +>Сохранить</guiicon +> на панели инструментов. Если требуется сохранить вашу модель под другим именем, то для этого следует выбрать элемент <guimenuitem +>Сохранить как</guimenuitem +> из меню <guimenu +>Файл</guimenu +>. </para> +<para +>Для удобства &umbrello; также предлагает опцию для автоматического сохранения вашей работы через определённый промежуток времени. При необходимости этот параметр и период времени можно настроить через меню <guimenu +>Настройка</guimenu +>.</para> +</sect2> +<sect2 id="load-model"> +<title +>Загрузка модели</title> +<para +>Для загрузки уже существующей модели следует выбрать элемент <guimenuitem +>Открыть</guimenuitem +> из меню <guimenu +>Файл</guimenu +> или нажать на иконку <guiicon +>Открыть</guiicon +> на панели инструментов. Модели, которые использовались в последнее время, отображаются в подменю <guimenuitem +>Открыть недавние</guimenuitem +> в меню <guimenu +>Файл</guimenu +>. </para> +<para +>&umbrello; может работать только с одной моделью. Таким образом, если вы, работая с несохранённой моделью, попробуете загрузить другую, то приложение запросит вас о сохранении ваших данных. </para> +</sect2> +</sect1 +> <!--load-save--> +<sect1 id="edit-model"> +<title +>Редактирование моделей</title> +<para +>В &umbrello; существует два основных способа редактирования элементов вашей модели: <itemizedlist> +<listitem +><para +>Редактирование элементов напрямую через дерево модели;</para +></listitem> +<listitem +><para +>Редактирование элементов модели через диаграмму.</para +></listitem> +</itemizedlist> +</para> +<para +>Используя контекстное меню различных элементов дерева модели, вы имеете возможность добавлять, удалять и модифицировать практически все элементы вашей модели. Контекстное меню папок дерева модели позволяет создавать различные типы диаграмм, а также, в зависимости от того, является ли текущая папка <emphasis +>вариантом использования</emphasis +> или <emphasis +>отображением</emphasis +>, создавать действующих лиц, варианты использования, классы и так далее. </para> +<para +>После добавления нового элемента в модель, его также можно редактировать через диалог свойств, который доступен через элемент <emphasis +>Свойства</emphasis +> контекстного меню дерева модели. </para> +<para +>Также можно редактировать вашу модель, добавляя и удаляя элементы на диаграммах, это будет подробнее рассмотрено в последующих разделах. </para> +</sect1> +<sect1 id="add-remove-diagrams"> +<title +>Добавление и удаление диаграмм</title> +<para +>Ваша &UML;-модель состоит из набора &UML;-элементов и связей между ними. Тем не менее, вы не можете видеть модель напрямую, для этого надо использовать <emphasis +>диаграммы</emphasis +>. </para> +<sect2 id="create-diagram"> +<title +>Создание диаграмм</title> +<para +>Для создания новой диаграммы в вашей модели просто выберите необходимый тип диаграммы через элемент <guimenuitem +>Новый</guimenuitem +> из меню <guimenu +>Диаграмма</guimenu +> и укажите его имя. Диаграмма будет создана, станет активной и отобразится в дереве модели. </para> +<para +>Следует помнить, что &umbrello; интенсивно использует контекстные меню: вы можете нажать правую кнопку на папке в дереве модели и выбрать соответствующий тип диаграммы из элемента <guisubmenu +>Новый</guisubmenu +> контекстного меню. Отметим, что вы можете создать диаграммы вариантов использования только в папках обзора вариантов использования, а другие типы диаграмм могут быть созданы только в папках логического отображения. </para> +</sect2> +<sect2 id="remove-diagram"> +<title +>Удаление диаграмм</title> +<para +>Для удаления диаграммы из вашей модели следует выбрать соответствующую диаграмму и выбрать элемент <guimenuitem +>Удалить</guimenuitem +> из меню <guimenu +>Диаграмма</guimenu +>. Того же можно достичь, выбрав элемент <guimenuitem +>Удалить</guimenuitem +> из контекстного меню диаграммы в дереве модели. </para> +<para +>Так как удаление диаграммы является серьёзным действием, которое может привести к потере данных, &umbrello; потребует подтверждение операции удаления перед её выполнением. После того, как диаграмма будет удалена и файл проекта будет сохранён, нет никакой возможности восстановить удалённую информацию. </para> +</sect2> +<sect2 id="rename-diagram"> +<title +>Переименование диаграмм</title> +<para +>Если требуется изменить имя существующей диаграммы, следует выбрать элемент <guimenuitem +>Переименовать</guimenuitem +> из контекстного меню диаграммы в дереве модели. </para> +<para +>Другим способом переименования диаграммы является диалог свойств диаграммы, который доступен через <guimenuitem +>Свойства</guimenuitem +> контекстного меню или через двойной щелчок по диаграмме в дереве модели. </para> +</sect2> +</sect1> +<sect1 id="edit-diagram"> +<title +>Редактирование диаграмм</title> +<para +>При работе с диаграммой &umbrello; пытается помочь вам с помощью применения нескольких простых правил, например, какие элементы могут размещаться на диаграммах определённого типа или какие взаимоотношения могут быть между ними. Если вы являетесь экспертом в &UML;, то можете даже не обратить на это внимание, но это будет хорошей подсказкой для новичков при создании стандартных диаграмм. </para> +<para +>После создания диаграмм их следует отредактировать. Следует понимать разницу между редактированием диаграммы и редактированием <emphasis +>модели</emphasis +>. Как было уже сказано, диаграммы являются <emphasis +>отображениями</emphasis +> модели. Например, если вы создаёте класс, редактируя диаграмму класса, то вы одновременно редактируете и диаграмму, и модель. Если же вы изменяете цвет или другие настройки отображения класса на вашей диаграмме класса, то вы редактируете только диаграмму, но ничего не изменяете в вашей модели. </para> +<sect2 id="insert-elements"> +<title +>Вставка элементов</title> +<para +>Первое, что вы делаете при редактировании новой диаграммы — вставляете элементы в неё (классы, действующие лица, варианты использования и так далее). Существует два основных метода:</para> +<itemizedlist> +<listitem +><para +>Перемещение существующих элементов в модель из дерева модели</para +></listitem> +<listitem +><para +>Создание новых элементов в модели и одновременное добавление их в диаграмму с помощью кнопок панели инструментов</para +></listitem> +</itemizedlist> +<para +>Для вставки элементов, уже существующих в модели, просто перетащите их из дерева модели на их место на диаграмме. Вы всегда можете перемещать элементы по диаграмме, выделяя их кнопкой выбора на панели инструментов. </para> +<para +>Второй метод добавления элементов в диаграмму — использование кнопок панели инструментов (следует отметить, что это приведёт к добавлению элементов в модель). </para> +<para +>Панель инструментов по умолчанию находилась в правой стороне окна приложения, в новой версии панель перемещена на верх окна. Вы можете переместить панель в любую сторону окна или оставить в виде отдельного окна. Набор инструментов, представленных на этой панели в виде кнопок, зависит от типа текущей диаграммы. Кнопка текущего инструмента активирована на Панели. Вы можете переключиться на инструмент Стрелка с помощью нажатия на клавишу &Esc;. </para> +<para +>При выборе инструмента из панели (например, инструмента вставки классов) указатель мыши меняет свой вид на перекрестье, и вы можете вставлять элементы данного типа в модель одиночными щелчками на диаграмме. Следует отметить, что элементы в &UML; должны иметь <emphasis +>уникальные имена</emphasis +>. Таким образом, если на одной диаграмме модели есть класс с именем <quote +>ClassA</quote +>, и вы пытаетесь создать на другой диаграмме новый класс с таким же именем, &umbrello; не позволит этого сделать, вам придётся дать классу другое уникальное имя. Если вы пытаетесь добавить <emphasis +>тот же</emphasis +> элемент на диаграмму с помощью инструмента вставки классов, то вы явно ошиблись с выбором инструмента. Вместо этого вам следует перетащить класс на диаграмму из дерева модели. </para> +</sect2> +<sect2 id="delete-elements"> +<title +>Удаление элементов</title> +<para +>Вы можете удалить любой элемент диаграммы, выбрав элемент <guimenuitem +>Удалить</guimenuitem +> из его контекстного меню. </para> +<para +>Повторимся ещё раз, существует <emphasis +>большая</emphasis +> разница между удалением объекта из диаграммы и удалением объекта из модели. Если вы удаляете объект из диаграммы, то он удаляется только из определённой диаграммы: элемент продолжает оставаться частью вашей модели, и это действие никак не влияет на остальные диаграммы. С другой стороны, если вы удаляете элемент из дерева модели, то происходит удаление элемента из <emphasis +>модели</emphasis +>. Так как данный элемент больше не присутствует в модели, он автоматически удаляется из всех диаграмм, где он присутствовал. </para> +</sect2> +<sect2 id="edit-elements"> +<title +>Редактирование элементов</title> +<para +>Вы можете редактировать большинство элементов &UML; в вашей модели и в диаграммах через диалог Свойства контекстного меню элементов. Каждый элемент имеет диалог, содержащий несколько страниц с соответствующими параметрами элемента. Для некоторых элементов, например, для якорей, вы можете изменять только имя элемента и текстовое пояснение, в то время как для других элементов, таких как классы, вы можете редактировать их свойства и методы, выбирать, что следует отображать на диаграмме (всю сигнатуру методов или только их имена, и так далее). </para> + +<para +>Для большинства элементов &UML; вы также можете открыть диалог свойств двойным щелчком на элементе при условии, что выбран инструмент Стрелка. Единственным исключением являются ассоциации, в их случае двойной щелчок создаёт точку якоря. Для Ассоциаций следует использовать контекстное меню для доступа к диалогу редактирования свойств. </para> + +<para +>Следует отметить, что доступ к свойствам элемента можно получить через контекстное меню элементов в дереве модели. Это позволяет вам глобально менять свойства элемента для всех диаграмм. </para> +</sect2> +<sect2 id="edit-classes"> +<title +>Редактирование классов</title> +<para +>Хотя редактирование свойств всех объектов было уже рассмотрено в предыдущих разделах, классы заслуживают отдельного упоминания, потому что они отличаются от остальных элементов своей сложностью и имеют большее количество опций, чем большинство других элементов &UML;. </para> +<para +>В диалоге редактирования свойств класса вы можеты отредактировать всё, от используемого цвета до методов и свойств, которые он имеет. </para> +<sect3 id="class-general-settings"> +<title +>Общие настройки для классов</title> +<para +>Назначение страницы общих настроек диалога свойств очевидно. На ней вы можете изменять имя класса, область видимости, документацию и так далее. Эта страница всегда доступна. </para> +</sect3> +<sect3 id="class-attributes-settings"> +<title +>Настройки атрибутов класса</title> +<para +>На странице настроек атрибутов вы можете добавлять, редактировать и удалять атрибуты (переменные) класса. Вы можете перемещать атрибуты вверх и вниз по списку с помощью стрелок. Эта страница всегда доступна. </para> +</sect3> +<sect3 id="class-operations-settings"> +<title +>Настройки методов класса</title> +<para +>Подобно странице настроек атрибутов, на странице настроек методов вы можете добавлять, редактировать и удалять методы класса. При добавлении или редактировании метода вы вводите основные данные в диалог <emphasis +>Свойства метода</emphasis +>. Если необходимо добавить параметры для метода, следует нажать на кнопку <guibutton +>Новыйпараметр</guibutton +>, которая вызовет появление диалога <emphasis +>Свойства параметра</emphasis +>. Эта страница всегда доступна. </para> +</sect3> +<sect3 id="class-template-settings"> +<title +>Настройки шаблонов класса</title> +<para +>Данная страница позволяет добавлять шаблоны классов, которые являются неопределёнными классами или типами данных. В Java 1.5 их будут обозначать термином <quote +>Generic</quote +>. </para> +</sect3> +<sect3 id="class-associations-page"> +<title +>Страница ассоциаций класса</title> +<para +>Страница <guilabel +>Ассоциации класса</guilabel +> отображает все ассоциации данного класса на текущей диаграмме. Двойной щелчок на ассоциации показывает её свойства, и в зависимости от типа ассоциации, вы можете редактировать некоторые параметры, например, настройки множественности или ролевое имя. Если ассоциация не позволяет изменение этих параметров, то диалог свойств ассоциации позволяет изменять только документацию ассоциации. </para> +<para +>Данная страница доступна, только если вы открыли свойства класса из диаграммы. Если вы открыли свойства класса из контекстного меню дерева модели, данная страница будет недоступна. </para> +</sect3> +<sect3 id="class-display-page"> +<title +>Страница отображения класса</title> +<para +>На странице <guilabel +>Настройки отображения</guilabel +> вы можете указать, что следует показывать на диаграмме. Класс может быть показан только в виде прямоугольника с именем класса в нём (что особенно полезно при наличии множества классов на диаграмме, или если на текущий момент не важна информация по классу) или с отображением всей информации по классу. </para> +<para +>В зависимости от объёма информации, которая должна отображаться, вы можете активировать соответствующие опции на данной странице. Изменения, вносимые здесь, влияют только на <emphasis +>отображение</emphasis +> диаграммы. Это означает, что настройка <quote +>скрытия</quote +> методов класса приведёт к тому, что методы данного класса не будут показаны на диаграмме, но будут являться частью модели. Данная настройка доступна только, если вы открыли свойства класса из диаграммы.</para> +</sect3> +<sect3 id="class-color-page"> +<title +>Страница цвета класса</title> +<para +>На странице <guilabel +>Цвет элемента</guilabel +> вы можете выбрать цвета для линий и заливки объекта. Очевидно, что опции на данной странице имеют смысл только для классов, показанных на диаграммах, и недоступны при открытии диалога свойств класса из дерева модели. </para> +</sect3> +</sect2> + +<sect2 id="associations"> +<title +>Ассоциации</title> +<para +>Ассоциации связывают два &UML;-элемента друг с другом. Обычно ассоциации определяются между двумя классами, но некоторые типы ассоциаций могут также существовать между вариантами использования и действующими лицами. </para> +<para +>Для создания ассоциации выберите соответствующий инструмент из панели инструментов (общая ассоциация, обобщение, объединение и так далее) и щёлкните сначала по первому, а потом по второму элементу, участвующему в ассоциации. Не следует пытаться перетащить мышкой первый элемент на второй, это ни к чему не приведёт. </para> +<para +>Если вы попытаетесь создать ассоциацию, противоречащую спецификации &UML;, &umbrello; отменит ваше действие, и вы получите сообщение об ошибке. Например, это может произойти, если существует обобщение от класса A к классу B, и вы пытаетесь создать обобщение от класса B к классу A. </para> +<para +>У ассоциации есть контекстное меню. При необходимости удалить ассоциацию просто выберите из него элемент <guimenuitem +>Удалить</guimenuitem +>. Также через контекстное меню можно открыть диалог свойств элемента. </para> +<sect3 id="anchor-points"> +<title +>Точки прикрепления</title> +<para +>По умолчанию ассоциации рисуются в виде прямой линии, соединяющей два объекта в диаграмме. </para> +<para +>Добавление точки прикрепления производится с помощью <mousebutton +>двойного</mousebutton +> щелчка на линии ассоциации, после этого появившуюся точку можно перемещать для придания нужной формы линии ассоциации. </para> +<para +>Если необходимо убрать точку прикрепления из линии ассоциации, просто щёлкните по ней два раза. </para> +<para +>Следует отметить, что редактирование свойств ассоциаций можно произвести только через их контекстное меню. В отличие от других &UML; элементов двойной щелчок на ассоциации приводит к созданию точки прикрепления, а не к появлению диалога редактирования свойств элемента. </para> +</sect3> +</sect2> + +<sect2 id="notes"> +<title +>Заметки, текст и группирование</title> +<para +>Заметки, строки текста и группировка являются элементами, которые могут быть размещены на диаграммах любого типа и не несут смысловой нагрузки для модели, но очень полезны для оформления диаграмм. </para> +<para +>Для добавления заметки или строки текста выберите соответствующий инструмент из панели инструментов и один раз щёлкните там, где хотите разместить элемент на диаграмме. Вы можете редактировать текст элемента, через контекстное меню или, в случае заметки, двойного щелчком на нём. </para> +<sect3 id="anchors"> +<title +>Якоря</title> +<para +>Якоря используются для прикрепления заметки к элементу &UML;. Например, если вы обычно используете текст для описания или комментирования класса или ассоциации, то якорь позволяет явным образом <quote +>прикрепить</quote +> заметку к определённому элементу. </para> +<para +>Для добавления якоря между заметкой и другим &UML;-элементом используйте соответствующий инструмент из панели инструментов. Щёлкните по заметке, а по элементу &UML;, к которому следует прикрепить данную заметку. </para> +</sect3> +</sect2> +</sect1> +</chapter> +<!--edit-diagram--> |