Практикалык долбоор: чакан китепкана
Нөлдөн баштап бир бүтүн, кайра колдонула турган статистика куралын долбоорлойбуз жана курабыз
Stats<T> классын курабыз.
- чакан китепкананын ачык API'син биринчи код сабына чейин пландоо,
- STL контейнерин (
std::vector<T>) ороп, бардык эстутумду RAII башкара тургандай кылуу, - классты шаблон кылып, ал
int,doubleжана башка типтер менен иштей тургандай кылуу, - статистиканы STL алгоритмдери менен ишке ашыруу (
std::accumulate,std::min_element,std::sort), - const-тууралыкты колдонуп, объекттерди
constшилтеме аркылуу берип, ашыкча көчүрмөлөрдөн качуу.
1. Адегенде план: китепкана эмне кылышы керек?
Жакшы китепкана сапаттуу мультикуралга окшош. Сиз он башка шайманды алып жүрбөйсүз — ар бир баскычы так бир ишти жасаган бир нерсени алып жүрөсүз. Код жазуудан мурун биз ачык API'ди — колдонуучу чакыра ала турган операциялардын топтомун — аныктайбыз, калганынын баарын жеке (private) сактайбыз.
Максатыбыз: колдонуучу сандар менен толтуруп, анан кадимки статистиканы сурай турган Stats<T> тиби. Убада кылынган операциялар:
add(value)жанаoperator+=— сан кошуу;count(),empty()— азырынча канча сан бар;sum(),mean(),min(),max()— негизги чоңдуктар;variance(),stddev(),median()— чачыранкылык.
Ички сактагыч (вектор, массив, файл) класстын өзүнө гана тиешелүү. Бул бөлүү — жашырылган ишке ашыруунун үстүндөгү таза бет — инкапсуляция деп аталат жана китепкананын бүт мааниси ушунда.
mean() функциясына таянып калгандан кийин, аны ичинен кантип эсептөөнү эркин өзгөртө аласыз, бирок анын сырткы маанисин өзгөртө албайсыз.