בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf ·...
Transcript of בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf ·...
מבוא למדעי המחשב
משימת תכנות
משימת תכנות
לפתור אותה תכנות ורוצים משימת מקבלים • OOPבעזרת
2010' במבחן מועד א 3השיעור מבוסס על שאלה –
OPPלתכנון עקרונות :הפשטה ומחזור הקוד, הכללה•
מחלקותמכלילים ויוצרים משפחה היררכית של – מקום כתופסילפי הצורך מגדירים מחלקות אבסטרקטיות – מגדירים את השיטות הציבוריות של כל מחלקה–
אוסף השיטות הציבוריות של מחלקה נקרא הממשק הציבורי של המחלקה• מגדירים שדות עבור הממשק הציבורי בכל מחלקה בהתאם לצורך–
מריבית אנקפסולציה• השיטות של הממשק הציבורי גבוה ככל האפשראת ממשים –
ניתן לבצע מימוש חלקי באמצעות של כפיית שיטות מוגנות על המחלקות במורד ההיררכיה• דורסים במורד ההיררכיה שיטות ממומשות בעת הצורך–
:הרחבה עתידית• מחלקות במעלה ההיררכיה אסור שתהיינה תלויות במחלקות שמתחתן –בשדות שומרים את הנתונים הגולמיים ולא ערכים , לא מגדירים שדות רפאים–
)fillers(לא שומרים ערכים לא נחוצים , מעובדים
המשימה y = f(x)המגדיר פונקציה חד מקומית Functionנתון ממשק
public interface Function { double valueAt(double x); // Returns the function’s value at “x” }
.xמחזירה את ערך הפונקציה בנקודה valueAt(x)השיטה • :לדוגמה•
y = f(x) = 2x+3 x=5
.13השיטה תחזיר את הערך
המשימה :Functionהממשק הלקוח מבקש ארבע מחלקות המיישמות את
.1LinearFunc המייצגת את הפונקציהy=a*x+b ) את הבנאי יקבלa ו- b כפרמטרים(. .2ConstantFunc המייצגת את הפונקציהy = c ) את הבנאי יקבלc כפרמטר(. .3SinFunct המייצגת את הפונקציהy = a*sin(f*x+p) ) יקבל את הבנאיa ,f ו- p כפרמטרים.( .4CosFunc ל"כנ.
:גםצריכות המחלקות האלו להכיל Functionליישום הממשק בנוסף
.xהמחזירה את ערך הפונקציה בריבוע בנקודה square(double x)שיטת 1.
.xהמחזירה את הערך של הנגזרת של הפונקציה בנקודה derivativeAt(double x)שיטת 2.
.הגיוניבאופן Objectשל המחלקה ()toStringהמחלקות האלו צריכות לדרוס את שיטת ולבסוף
LinearFunc(double a, double b) המשימה
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
CosFunction(double t)
double valueAt(double x)
double square(double x)
double derived()
ConstantFunc(double c)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
SinFunc(double a, double f, double p)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
נדבר בסוף toStringעל
LinearFunction(double a,
double b)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
abstract TrigoFunction( double a, double f, double p)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
CosFunction( double a, double f, double p)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
בונים משפחה של מחלקות
ConstatFunction(double c)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
SinFunction( double a, double f, double p)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
abstract Func implements
Function
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
LinearFunction(double a,
double b)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
abstract TrigoFunction( double a, double f, double p)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
CosFunction( double a, double f, double p)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
ConstatFunction(double c)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
SinFunction( double a, double f, double p)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
abstract Func implements
Function
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
?Func -ב valueAtהאם ניתן לממש את
LinearFunction(double a,
double b)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
abstract TrigoFunction( double a, double f, double p)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
CosFunction( double a, double f, double p)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
ConstatFunction(double c)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
SinFunction( double a, double f, double p)
double valueAt(double x)
double square(double x)
double derivativeAt(double x)
abstract Func implements
Function
abstract double valueAt(double x)
double square(double x)
double derivativeAt(double x)
?Func -בsqareהאם ניתן לממש את
LinearFunction(double a,
double b)
double valueAt(double x)
double derivativeAt(double x)
abstract TrigoFunction( double a, double f, double p)
double valueAt(double x)
double derivativeAt(double x)
CosFunction( double a, double f, double p)
double valueAt(double x)
double derivativeAt(double x)
ConstatFunction(double c)
double valueAt(double x)
double derivativeAt(double x)
SinFunction( double a, double f, double p)
double valueAt(double x)
double derivativeAt(double x)
abstract Func implements
Function
abstract double valueAt(double x)
double square(double x)
double derivativeAt(double x)
?Func -בderivationAtהאם ניתן לממש את
LinearFunction(double a,
double b)
double valueAt(double x)
Function derivative()
abstract TrigoFunction( double a, double f, double p)
double valueAt(double x)
Function derivative()
CosFunction( double a, double f, double p)
double valueAt(double x)
Function derivative()
ConstatFunction(double c)
double valueAt(double x)
Function derivative()
SinFunction( double a, double f, double p)
double valueAt(double x)
Function derivative()
abstract Func implements
Function
abstract double valueAt(double x)
double square(double x)
abstract Function derivative()
double derivativeAt(double x)
?Linear -בvalueAtצריך לממש את
LinearFunction(double a,
double b)
double valueAt(double x)
Function derivative()
abstract TrigoFunction( double a, double f, double p)
double valueAt(double x)
Function derivative()
CosFunction( double a, double f, double p)
double valueAt(double x)
Function derivative()
ConstatFunction(double c)
Function derivative()
SinFunction( double a, double f, double p)
double valueAt(double x)
Function derivative()
abstract Func implements
Function
abstract double valueAt(double x)
double square(double x)
abstract Function derivative()
double derivativeAt(double x)
?Linear -בderivativeצריך לממש את
LinearFunction(double a,
double b)
double valueAt(double x)
Function derivative()
abstract TrigoFunction( double a, double f, double p)
double valueAt(double x)
Function derivative()
CosFunction( double a, double f, double p)
double valueAt(double x)
Function derivative()
ConstatFunction(double c)
SinFunction( double a, double f, double p)
double valueAt(double x)
Function derivative()
abstract Func implements
Function
abstract double valueAt(double x)
double square(double x)
abstract Function derivative()
double derivativeAt(double x)
?Trigo -בvalueAtהאם ניתן לממש את values: a*Math.sin(f*x+p) a*Math.cos(f*x+p)
LinearFunction(double a,
double b)
double valueAt(double x)
Function derivative()
abstract TrigoFunction( double a, double f, double p)
abstract double basic(double v)
double valueAt(double x)
Function derivative()
CosFunction( double a, double f, double p)
double basic(double v)
Function derivative()
ConstatFunction(double c)
SinFunction( double a, double f, double p)
double basic(double v)
Function derivative()
abstract Func implements
Function
abstract double valueAt(double x)
double square(double x)
abstract Function derivative()
double derivativeAt(double x)
?Trigo -ב derivativeהאם ניתן לממש את
LinearFunction(double a,
double b)
double valueAt(double x)
Function derivative()
abstract TrigoFunction( double a, double f, double p)
abstract double basic(double v)
double valueAt(double x)
CosFunction( double a, double f, double p)
double basic(double v)
Function derivative()
ConstatFunction(double c)
SinFunction( double a, double f, double p)
double basic(double v)
Function derivative()
abstract Func implements
Function
abstract double valueAt(double x)
double square(double x)
abstract Function derivative()
double derivativeAt(double x)
?cos -ו sin -ב basicצריך לממש את basic: a*Math.sin(f*x+p) a*Math.cos(f*x+p)
LinearFunction(double a,
double b)
double valueAt(double x)
Function derivative()
abstract TrigoFunction( double a, double f, double p)
abstract double basic(double v)
double valueAt(double x)
CosFunction( double a, double f, double p)
double basic(double v)
Function derivative()
ConstatFunction(double c)
SinFunction( double a, double f, double p)
double basic(double v)
Function derivative()
abstract Func implements
Function
abstract double valueAt(double x)
double square(double x)
abstract Function derivative()
double derivativeAt(double x)
?cos -ו sin -ב derivativeצריך לממש את
LinearFunction(double a,
double b)
double valueAt(double x)
Function derivative()
abstract TrigoFunction( double a, double f, double p)
abstract double basic(double v)
double valueAt(double x)
CosFunction( double a, double f, double p)
double basic(double v)
Function derivative()
ConstatFunction(double c)
SinFunction( double a, double f, double p)
double basic(double v)
Function derivative()
abstract Func implements
Function
abstract double valueAt(double x)
double square(double x)
abstract Function derivative()
double derivativeAt(double x)
?toString -מה עם שדות ו
מימוש
public interface Function { double valueAt(double x); }
מימוש
public abstract class Func implements Function { // double valueAt(double x); public double square(double x) { double v = valueAt(x); return v * v; } protected abstract Func derivative(); public double deriveativeAt(double x) { return derivative().valueAt(x); } }
מימוש
public class LinearFunc extends Func { private double a, b; public LinearFunc(double a, double b) { this.a = a; this.b = b; } public double valueAt(double x) { return a * x + b; } protected Func derivative() { return new ConstantFunc(a); } }
מימוש
public class ConstantFunc extends LinearFunc { public ConstantFunc(double c) { super(0, c); } }
מימוש
public abstract class TrigoFunc extends Func { protected double amplitude, frequency, phase; public TrigoFunc(double amplitude, double frequency, double phase) { this.amplitude = amplitude; this.frequency = frequency; this.phase = phase; } protected abstract double basic(double v); public double valueAt(double x) { return amplitude * basic(frequency * x + phase); } }
מימוש
public class SinFunc extends TrigoFunc { public SinFunc(double amplitude, double frequency, double phase) { super(amplitude, frequency, phase); } protected double basic(double v) { return Math.sin(v); } protected Func derivative() { return new CosFunc(amplitude * frequency, frequency, phase); } }
מימוש
public class CosFunc extends Func { }
מה בין ממשקים למחלקות אבסטרקטיות :דומה•
שניהם משמשים לתיאור מצב בו לטיפוסים שונים של אובייקטים – .יש מאפיינים משותפים
.שניהם מאפשרים פולימורפיזם– :שונה•
:ממשקים– .תוכנההנדסת • .מכנה משותף לוגי. הגדרת יכולות משותפות לאובייקטים• .ניתן לממש הרבה ממשקים במחלקה אחת•
:הורשה– .שימוש מחדש בקוד• . מכנה משותף טכני יותר• .ניתן לרשת מחלקה אחת בלבד•