Pro Yearly is on sale from $80 to $50! »

АФТИ ООП 2013-2014. Лекция I/06

АФТИ ООП 2013-2014. Лекция I/06

3749bacb748a9a39d77d007e87861559?s=128

Oleg Dashevskii

October 14, 2013
Tweet

Transcript

  1. ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Лекция № 6 14.10.2013 г.

  2. В ПРОШЛОЙ СЕРИИ • Single responsibility principle (SRP). • Наследование,

    агрегация, композиция, ассоциация. • Задача 1. Применение ООП к stdio.h. • Задача 2. «Малое ООП». Задача линейной аппроксимации множества точек.
  3. ПОТОКИ В C++ ios_base ios istream ostream iostream istringstream ifstream

    filebuf
  4. ПОТОКИ В QT QObject QIODevice QFile QTextStream QBuffer QProcess QAbstract

    Socket и др.
  5. class LinearRegression { public: LinearRegression(const QPointF *_points, int _size); LinearRegression(const

    QVector<QPointF> &_points); // y=Ax+B double a(); double b(); QPointF point(double x) { return QPointF(x, a()*x+b()); } double mse(); double std(); protected: void calculate(); /****/ const QPointF *points; int size; bool ready; double _a, _b; };
  6. ЗАДАЧА 2’ Проектирование класса для линейной экспоненциальной аппроксимации набора точек

  7. class BaseRegression { public: BaseRegression(const QPointF *_points, int _size); BaseRegression(const

    QVector<QPointF> &_points); virtual double y(double x)=0; QPointF point(double x) { return QPointF(x, y(x)); } double mse(); double std(); protected: /****/ const QPointF *points; int size; };
  8. class ExponentialRegression : public BaseRegression { public: ExponentialRegression(const QVector<QPointF> &points);

    // y=A*exp(B*x) double a(); double b(); double y(double x) { return a()*exp(b()*x); } protected: void calculate(); /****/ bool ready; double _a, _b; };
  9. void ExponentialRegression::calculate() { QVector<QPointF> logpoints(size); for (int i = 0;

    i < size; ++i) logpoints[i] = QPointF(points[i].x(), log(fabs(points[i].y()))); LinearRegression lr(logpoints); _b = lr.a(); _a = exp(lr.b()); if (size > 0 && points[0].y() < 0) _a *= -1; ready = true; }
  10. void ExponentialRegression::calculate() { QVector<QPointF> logpoints(size); for (int i = 0;

    i < size; ++i) logpoints[i] = QPointF(points[i].x(), log(fabs(points[i].y()))); LinearRegression lr(logpoints); _b = lr.a(); _a = exp(lr.b()); if (size > 0 && points[0].y() < 0) _a *= -1; ready = true; } Композиция
  11. ЗАДАЧА 3 ОО-дизайн для задачи сортировки

  12. КОНЕЦ ШЕСТОЙ ЛЕКЦИИ