Term
|
Definition
| a procedure that emits all members of a set one at a time |
|
|
Term
|
Definition
| when presented with one of its members eventually stops running and prints, and when presented with a string that is not a member does something else |
|
|
Term
| Software Construction's Three Main Steps |
|
Definition
Planning Implementation, testing, and documenting Deployment and maintenance |
|
|
Term
|
Definition
| the degree to which program modules rely on other modules. can be low (also loose or weak) or high (also tight or strong) |
|
|
Term
|
Definition
| when one module modifies or relies on the internal workings of another module |
|
|
Term
|
Definition
| when multiple modules share the same global variable |
|
|
Term
|
Definition
| when multiple modules share the same externally imposed data format, communication protocol, or device interface |
|
|
Term
|
Definition
| when one modules controls the flow of another by passing it some information |
|
|
Term
|
Definition
| when multiple modules share the same composite data structure, and use only part of it, possibly different parts. This can change the way a module reads or records because an unused field has been changed |
|
|
Term
|
Definition
| when modules share data (through a parameter for example) |
|
|
Term
|
Definition
| modules use public interfaces to share parameter-less data |
|
|
Term
|
Definition
Ignoring details of the specific application often makes things easier The higher the degree of abstraction of a program, the more situations it can cover |
|
|
Term
|
Definition
| Order of Implementation, Design for Debugability, Avoid Cleverness like the Plague |
|
|
Term
|
Definition
Use assertions When to turn off assertions: turn them off when your ready to release, but errors should be handled depending on the situation of the program Switchable diagnostics: sometimes it helps to put in multiple debugs that can be switched using flags |
|
|
Term
|
Definition
Output first: write the output parts of the program first so you have something to test Incrementally refine Get it running and keep adding features |
|
|
Term
| Hierarchy of Bugs (declining order of severity) |
|
Definition
Plausible Erroneous Results Inplausible Erroneous Results Runtime crash or Incorrect mode Runtime abort Runtime diagnostics (possibly with abort) Linker diagnostics Compile warning Compiler diagnostics |
|
|
Term
|
Definition
Test code for deviations Formulate hypothesis about bug Design a test for the bug Test again |
|
|
Term
|
Definition
| Only the first error is useful, as most additional errors occur because of that first error. |
|
|
Term
|
Definition
| This works by checking if a statement is true or false. If it is true, the program continues. If it is false, It will outputs an error message and makes a call to abort(). Agnes describes this as a special mechanism used to make programs fail with an error message in C and C++. |
|
|
Term
| Derived Data Types ( Indirected ) |
|
Definition
|
|
Term
| Derived Data Types ( Record ) |
|
Definition
|
|
Term
| Derived Data Types ( Fundamental ) |
|
Definition
| character, integer, floating point, void |
|
|
Term
|
Definition
Ex: float f() { return 3.1416; } //#1 float x = 3.1416; //#2 float& g() { return x; } //#3 float& r = x; //#4 int& h() { return *new int; } //#5
#1 declares f() to return a float, namely 3.1415. It does nto "return the IEEE 754 representation of 3.1416," nor does it "return 3.1416 by IEEE 754 representation" -- data representations are an implementation issue.
#2 declares x to refer to (i.e., to be a reference to) a float, initially 3.1416
#3 declares g() to return x, which is a reference to a float. It does not "return a reference to x," nor does it "return x by reference."
#4 declares r to refer to x, which is a reference to a float.
#5 declares the function h() to return an int&. But, that newly construced integer location (C++ object) has neither "names" nor "aliases" and is, therefore, a counterexample to the general claim that a reference is "an alternative name for an object or a function," i.e., an "alias." |
|
|
Term
|
Definition
| any value of the type widget |
|
|
Term
|
Definition
| anything that has state capable of representing a widget |
|
|
Term
|
Definition
| the data type whose values are all of the widget references |
|
|
Term
| Referent (or value or content) of a widget reference |
|
Definition
| the widget value, if any, that the reference's current state represents |
|
|
Term
| Reference-to-referent conversion |
|
Definition
| a compile time conversion that replaces a reference by its referent |
|
|
Term
|
Definition
|
|
Term
| Instance of the type widget |
|
Definition
|
|
Term
|
Definition
| any instance of a class type |
|
|
Term
|
Definition
| any widget-valued expression (an expression that denotes a value) |
|
|
Term
|
Definition
| any widget&-valued expression (an expression that denotes a variable) |
|
|
Term
| lvalue-to-rvalue conversion |
|
Definition
| the effect on an lvalue when its denotation (the reference it denotes) undergoes reference-to-referent conversion |
|
|
Term
|
Definition
| a reference whos referent is of a nonreference type (an instance of a class) |
|
|
Term
|
Definition
| a reference whos referent is a C++ object (any variable used to describe an instance of a class) |
|
|
Term
|
Definition
identity handle address id id number name (if the identity is a string) |
|
|
Term
|
Definition
reference memory location contiguous memory segment object cell registry (usually a special case) variable (if the reference is named) |
|
|
Term
|
Definition
|
|
Term
|
Definition
bind (reference to reference's identity to referent) assign write to mutate modify update initialize (first time only) rebind (non-first time only) |
|
|
Term
|
Definition
|
|
Term
|
Definition
const variables literal constants (i.e., 12, 3.14, "Hello", etc.) macro-defined constants (i.e., #define PI 3.14159) values of an enum types (i.e., enum colors {red, green, blue} ) |
|
|
Term
|
Definition
| varibles should be created as late as possible, and into the innermost scope as possible |
|
|
Term
| Lifetimes of Variables regular definitions |
|
Definition
| variable lasts as long as the scope (aka from { to } ) |
|
|
Term
| Lifetimes of Variables static definitions |
|
Definition
| lasts from its definition till the program exits |
|
|
Term
| Lifetimes of Variables automatic definitions |
|
Definition
| lasts from its definition until its scope is exited |
|
|
Term
| Lifetimes of Variables dynamic definitions |
|
Definition
| lasts from the execution of the new-expression that creates it until the end of hte program or the execution of a delete-expression that deletes it |
|
|
Term
|
Definition
Note that... int const * p; declares p to be a pointer to an int const. But... int* const p = &x; declares p to be a pointer constant that points to the non-const int variable x. int const* const x = &x; declares x to be a pointer constant that points to an int constant. |
|
|
Term
|
Definition
const lvalues (expressions that denote variable) shall not be used to initialize non-const references, not may they appear on the left-hand side of an assignment expression Applying the address-of operator (&) to a const lvalue yields a const address Dereferencing a const address creates a const lvalue The value of a const pointer is a consts address. Non-const addresses may be assigned to (stored into) const pointer variables, but the values retrieved from them will be const. On the other hand, const addresses shall nt be stored into non-const pointer variables, because when that value is retrieved it would be non-const const member functions treat *this as a const-reference parameter |
|
|
Term
|
Definition
| x is non-const even when it is a member of a const instance of the surrounding class |
|
|
Term
|
Definition
| instances and pointers and references to instances of a derived class are implicitly converted to pointers and references (respectively) to public base classes. |
|
|
Term
|
Definition
| if B is a base class and p points to the base object of an instance of a class D derived from B, then dynamic_cast p - yields a pointer ot that instance and otherwise the null pointer. The same goes for references, except that a special exception gets thrown in the otherwise case. |
|
|
Term
|
Definition
A concept that consists of Overloading, Abstract Data Types (method overloading, Object-Oriented Programming (method overriding)
Note that overloading is performed by the compiler, while overriding happens at run time as a result of vtable mechanisms put in place by the compiler |
|
|
Term
|
Definition
| multiple functions can have the same name provided that they have distinct signatures (sequences of argument types) |
|
|
Term
| Abstract Data Types (method overloading) |
|
Definition
| multiple functions can have the same name provided that they are members of distinct classs |
|
|
Term
| Object-Oriented Programming (method overriding) |
|
Definition
| member functions (aka methods) of a derived class are invoked instead of their virtual namesakes in the base-class, even if hte object is accessed via a pointer to or reference to its base object |
|
|
Term
|
Definition
if we directly assign an object of a derived class to an object of a base class, we will get a compiler error if we indirectly assign an object of a derived class to an object of a base class, the parts specific to the derived class will be sliced off, leaving only the parts that exist in the base class |
|
|
Term
|
Definition
| The term "generic programming" refers to the use of templates |
|
|
Term
|
Definition
Advantage to adding attributes to data typeis that you dont need access to the classes definitions. Disadvantage to adding attributes to data types is that there is overhead in speed or space. |
|
|