Voting System Design
The system must be able to support the organization and
carrying out of elections at national, state, and local levels.
It must allows voters to register and vote online; it must
maintain the normal prohibitions against one person voting
more than once in any single election; it must maintain the normal
prohibition against non-registered voters voting in any elections;
it must also maintain the normal prohibition of any one voter
being registered in more than one place.
The system must allow novel forms of election to occur... for example,
we will want to have elections as we do now (meaning all voting
in a single day) but we also will want to have elections that occur
over longer periods of time... weeks, perhaps months.
We will want to allow flexible voting policies... for example, we may want
an election where once your vote is cast it is irrevocable;
we may also want elections where a voter can log on and change his/her
vote as many times as desired... as long as it is prior to the
end of the elction.
We want the system to have an information structure to make
it easy for the voters to get at least candidate statements, party platforms,
information about voting process, and the law of the land.
The system must support the gathering of statistical information...
choice (issue, referendum)
ballot (collection of choices)
electorate (registered voters)
documents (laws, news, instructions, statements, etc.)
talley (vote count)
Activities of the system
documents the law of the land (constitution, etc.)
documents election laws
documents candidate/party statements/platforms
authenticate voters when voting
enforce one-vote-per-voter-per-issue (or whatever the rules are)
talley votes, keep statistics
- Develop the Use Cases for the system
- Let Use Cases guide your CRC cards sessions
- go from cards (concepts and relationships) to classes
- may have many objects in the system that are not part of
the card design... "internal" components of the patterns, etc.
- may have many methods to implement a single responsibility
- identify the variances... areas that appear right for pattern
- develop a user interface...
program to an interface, not an implementation
favor object composition over inheritance