| DataInputStream | allow programmer to exchange more sophisticated types of data than simple bytes without having to worry about how to translate them into a byte stream |   | 
| can contain Java primitive types such as int and double |   | 
| is a subtopic of 3.5 - Technology Needed to Build Client-Server Systems |   | 
| is an instance of filter |   | 
| filter | converts raw bytes of a message into other forms |   | 
| Java class | can extend only one superclass |   | 
| can have more than one constructor each of which has different sets of arguments |   | 
| can have the same name as another class if the two classes are not in the same package and their packages are never imported into the same file |   | 
| can implement more than one interface |   | 
has form class classname {  // declarations of variables    // declarations of constructors (discussed below)    // declarations of other methods with public ones first }  |   | 
| is abstract if it has one or more abstract methods |   | 
| is stored in a file of the same name |   | 
| may implement particular low-level subsystems |   | 
| should be placed in its own source file |   | 
| should have a unique name since somebody in the future might want to import the packages containing both classes and hence create a name clash |   | 
should order elements as follows: - class variables
 - instance variables
 - constructors
 - the most important public methods
 - methods that are simply used to access variables
 - private methods
 
  |   | 
| uses an implements clause to declare that it contains methods for each of the operations specified by the interface |   | 
| class | declares a list of variables, called instance variables, corresponding to data that will be present in each instance |   | 
| has part class name |   | 
| has part class variable |   | 
| has part code |   | 
| has part constructor |   | 
| has part instance variable |   | 
| has part method |   | 
| has part variables |   | 
| is divided up into methods |   | 
| is drawn as a box with the name of the class inside in a UML class diagram |   | 
| is needed in a domain model if you have to store or manipulate instances of it in order to implement a requirement |   | 
| represents several similar objects |   | 
| see also class^2 |   | 
| should be created to hold a responsibility if the responsibility cannot be attributed to any of the existing classes |   | 
| should be named after things their instances represent in the real world |   | 
| should not be named after the internals of a computer system such as 'Record', 'Table', 'Data', 'Structure', or 'Information' |   | 
| data abstraction | groups the pieces of data that describe some entity, so that programmers can manipulate that data as a unit |   | 
| helps a programmer to cope with the complexity of data |   | 
| hides the details of data |   | 
| module | has high cohesion if related aspects of a system are kept together in this module, and unrelated aspects are kept out |   | 
| lacks side effects if it does not modify any data, and does not leave behind any information, other than its result, that would have an effect on other computations |   | 
| component | may perform a special-purpose function such as the user interface for a particular system |   |