1. A method of designing a software system, comprising: defining a set of functional requirements that describe what the software system is to achieve; defining a set of design parameters, where each design parameter in the set satisfies at least one of the functional requirements; decomposing the set of functional requirements and design parameters to create a hierarchy of functional requirements and a hierarchy of design parameters, wherein the hierarchy of functional requirements comprises at least one parent functional requirement at a top level in the hierarchy of functional requirements and is decomposed into at least two leaf functional requirements at a bottom level in the hierarchy of functional requirements, wherein the at least two leaf functional requirements collectively accomplish the at least one parent functional requirement, and wherein the hierarchy of design parameters comprises at least one parent design parameter at a top level in the hierarchy of design parameters and is decomposed into at least two leaf design parameters at a bottom level in the hierarchy of design parameters, wherein the at least two leaf functional requirements collectively describe the at least one parent design parameter; defining a design matrix that comprises a plurality of rows, a plurality of columns, and a plurality of cells, each of which is formed by the intersection of one of the plurality of rows and one of the plurality of columns, wherein each of the plurality of rows corresponds to at least one of the leaf functional requirements, each column of the design matrix corresponds to at least one of the leaf design parameters, and each cell corresponds to the intersection of the leaf functional requirements and one of the leaf design parameters, and wherein a cell in the design matrix is marked with an indicator when its corresponding leaf design parameter satisfies its corresponding leaf functional requirement; and using the design matrix to define an object-oriented structure of the software system by performing acts of: a) creating an object-oriented class that corresponds to a parent design parameter in the hierarchy of design parameters; b) identifying attributes of the object-oriented class by representing the leaf design parameters of the parent design parameter as the attributes of the object-oriented class; c) for each of the leaf design parameters identified in the act b), determining from the design matrix the leaf functional requirement that satisfies the design parameter; and d) representing each leaf functional requirement determined in the act c) as a method of the object-oriented class, wherein the method for each leaf functional requirement is a method to perform the task defined by the leaf functional requirement.