Suppose that you develop a big program around trade structures only to discover
that you are more often interested in total trade costs than in prices per
share. For efficiency, you might want to switch from a price
structure variable to a total_cost
structure variable, so that
multiplication is not needed when you want a total_cost
delivered.
If you work with the information in trade
objects using
constructors, readers, and writers exclusively, you need only to change the
definitions of those constructors, readers, and writers to work with a
total_cost
structure variable instead of a price
structure
variable. Instead of computing total_cost
from price
and
number
values, you compute price
from
total_cost
and number
values:
struct trade {double total_cost; int number;}; struct trade* construct_trade (double price, int number) { struct trade *tptr; tptr = (struct trade*) malloc (sizeof (struct trade)); tptr -> total_cost = price * number; tptr -> number = number; return tptr; } double read_trade_price (struct trade *tptr) { return (tptr -> total_cost) / (tptr -> number); } int read_trade_number (struct trade *tptr) { return tptr -> number; } double read_total_cost (struct trade *tptr) { return tptr -> total_cost; } void write_trade_price (double price, struct trade *tptr) { tptr -> total_cost = price * tptr -> number; } void write_trade_number (int number, struct trade *tptr) { tptr -> number = number; } void write_total_cost (double total_cost, struct trade *tptr) { tptr -> total_cost = total_cost; }