[{{mminutes}}:{{sseconds}}] X
Пользователь приглашает вас присоединиться к открытой игре игре с друзьями .
cc
(0)       Используют 3 человека

Комментарии

Ни одного комментария.
Написать тут
Описание:
cc
Автор:
lkk
Создан:
4 января 2013 в 19:41
Публичный:
Нет
Тип словаря:
Тексты
Цельные тексты, разделяемые пустой строкой (единственный текст на словарь также допускается).
Содержание:
1 The key difference between top-down and bottom-up strategies is that one is a
decomposition strategy and the other is a composition strategy. One starts from the
general problem and breaks it into manageable pieces; the other starts with manageable
pieces and builds up a general solution. Both approaches have strengths and weaknesses
that you'll want to consider as you apply them to your design problems.
The strength of top-down design is that it's easy. People are good at breaking something
big into smaller components, and programmers are especially good at it.
Another strength of top-down design is that you can defer construction details. Since
systems are often perturbed by changes in construction details (for example, changes in
a file structure or a report format), it's useful to know early on that those details should
be hidden in classes at the bottom of the hierarchy.
One strength of the bottom-up approach is that it typically results in early identification
of needed utility functionality, which results in a compact, well-factored design. If
similar systems have already been built, the bottom-up approach allows you to start the design of the new system by looking at pieces of the old system and asking "What can I
reuse?"
A weakness of the bottom-up composition approach is that it's hard to use exclusively.
Most people are better at taking one big concept and breaking it into smaller concepts
than they are at taking small concepts and making one big one. It's like the old
assemble-it-yourself problem: I thought I was done, so why does the box still have parts
in it? Fortunately, you don't have to use the bottom-up composition approach
exclusively.
Another weakness of the bottom-up design strategy is that sometimes you find that you
can't build a program from the pieces you've started with. You can't build an air-plane
from bricks, and you might have to work at the top before you know what kinds of
pieces you need at the bottom.
To summarize, top down tends to start simple, but sometimes low-level complexity
ripples back to the top, and those ripples can make things more complex than they really
needed to be. Bottom up tends to start complex, but identifying that complexity early on
leads to better design of the higher-level classes—if the complexity doesn't torpedo the
whole system first!
In the final analysis, top-down and bottom-up design aren't competing strategies—
they're mutually beneficial. Design is a heuristic process, which means that no solution
is guaranteed to work every time. Design contains elements of trial and error. Try a
variety of approaches until you find one that works well.
Experimental Prototyping
Sometimes you can't really know whether a design will work until you better understand
some implementation detail. You might not know if a particular database organization
will work until you know whether it will meet your performance goals. You might not
know whether a particular subsystem design will work until you select the specific GUI
libraries you'll be working with. These are examples of the essential "wickedness" of
software design—you can't fully define the design problem until you've at least partially
solved it.
A general technique for addressing these questions at low cost is experimental
prototyping. The word "prototyping" means lots of different things to different people
(McConnell 1996). In this context, prototyping means writing the absolute minimum
amount of throwaway code that's needed to answer a specific design question.
Prototyping works poorly when developers aren't disciplined about writing the absolute
minimum of code needed to answer a question. Suppose the design question is, "Can the
database framework we've selected support the transaction volume we need?" You don't
need to write any production code to answer that question. You don't even need to know
the database specifics. You just need to know enough to approximate the problem
space—number of tables, number of entries in the tables, and so on. You can then write
very simple prototyping code that uses tables with names like Table1, Table2, and
Column1, and Column2, populate the tables with junk data, and do your performance
testing. Prototyping also works poorly when the design question is not specific enough. A
design question like "Will this database framework work?" does not provide enough
direction for prototyping. A design question like "Will this database framework support
1,000 transactions per second under assumptions X, Y, and Z?" provides a more solid
basis for prototyping.
A final risk of prototyping arises when developers do not treat the code as throwaway
code. I have found that it is not possible for people to write the absolute minimum
amount of code to answer a question if they believe that the code will eventually end up
in the production system. They end up implementing the system instead of prototyping.
By adopting the attitude that once the question is answered the code will be thrown
away, you can minimize this risk. One way to avoid this problem is to create prototypes
in a different technology than the production code. You could prototype a Java design in
Python or mock up a user interface in Microsoft PowerPoint. If you do create prototypes
using the production technology, a practical standard that can help is requiring that class
names or package names for prototype code be prefixed with prototype. That at least
makes a programmer think twice before trying to extend prototype code (Stephens
2003).
Used with discipline, prototyping is the workhorse tool a designer has to combat design
wickedness. Used without discipline, prototyping adds some wickedness of its own.
Collaborative Design
In design, two heads are often better than one, whether those two heads are organized
formally or informally. Collaboration can take any of several forms:

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