mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2025-12-07 15:22:31 +01:00
Author:king
Date:2009-05-27T01:21:35.000000Z git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@230 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
[[Property:title|I2E: Genericity]]
|
||||
[[Property:weight|-6]]
|
||||
[[Property:uuid|091c0b65-73de-b454-b3f2-d8752983780e]]
|
||||
Building software components (classes) as implementations of abstract data types yields systems with a solid architecture but does not in itself ensure reusability and extendibility. Two key techniques address the problem: generosity (unconstrained or constrained) and inheritance. Let us look first at the unconstrained form.
|
||||
Building software components (classes) as implementations of abstract data types yields systems with a solid architecture but does not in itself ensure reusability and extendibility. Two key techniques address the problem: genericity (unconstrained or constrained) and inheritance. Let us look first at the unconstrained form.
|
||||
|
||||
To make a class generic is to give it '''formal generic parameters''' representing as unknown types, as in these examples from EiffelBase, an open-source library covering basic data structures and algorithms:
|
||||
<code>
|
||||
|
||||
@@ -29,7 +29,7 @@ Example from EV_TIMEOUT
|
||||
|
||||
If you have an existing, custom platform dependent implementation, there are a few more changes needed than what was required for the interface class.
|
||||
|
||||
For the interface class changes, now the interface object is passed to the implementation after creation, via `assign_interface', this means that `make' no longer takes an argument. This also means that to adhere to void-safety all of the types are now created and initialized via the creation routine of the implementation object.
|
||||
For the interface class changes, now the interface object is passed to the implementation after creation, via `assign_interface', this means that `make' no longer takes an argument (see `create_implementation' above). This also means that to adhere to void-safety all of the types are now created and initialized via the creation routine of the implementation object.
|
||||
|
||||
|
||||
An example from the conversion of Windows implementation of EV_BUTTON_IMP.
|
||||
|
||||
Reference in New Issue
Block a user