בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf ·...

25
מבוא למדעי המחשב משימת תכנות

Transcript of בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf ·...

Page 1: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

מבוא למדעי המחשב

משימת תכנות

Page 2: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

משימת תכנות

לפתור אותה תכנות ורוצים משימת מקבלים • OOPבעזרת

2010' במבחן מועד א 3השיעור מבוסס על שאלה –

Page 3: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

OPPלתכנון עקרונות :הפשטה ומחזור הקוד, הכללה•

מחלקותמכלילים ויוצרים משפחה היררכית של – מקום כתופסילפי הצורך מגדירים מחלקות אבסטרקטיות – מגדירים את השיטות הציבוריות של כל מחלקה–

אוסף השיטות הציבוריות של מחלקה נקרא הממשק הציבורי של המחלקה• מגדירים שדות עבור הממשק הציבורי בכל מחלקה בהתאם לצורך–

מריבית אנקפסולציה• השיטות של הממשק הציבורי גבוה ככל האפשראת ממשים –

ניתן לבצע מימוש חלקי באמצעות של כפיית שיטות מוגנות על המחלקות במורד ההיררכיה• דורסים במורד ההיררכיה שיטות ממומשות בעת הצורך–

:הרחבה עתידית• מחלקות במעלה ההיררכיה אסור שתהיינה תלויות במחלקות שמתחתן –בשדות שומרים את הנתונים הגולמיים ולא ערכים , לא מגדירים שדות רפאים–

)fillers(לא שומרים ערכים לא נחוצים , מעובדים

Page 4: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

המשימה 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השיטה תחזיר את הערך

Page 5: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

המשימה :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המחלקות האלו צריכות לדרוס את שיטת ולבסוף

Page 6: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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על

Page 7: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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)

Page 8: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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האם ניתן לממש את

Page 9: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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האם ניתן לממש את

Page 10: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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האם ניתן לממש את

Page 11: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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צריך לממש את

Page 12: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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צריך לממש את

Page 13: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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)

Page 14: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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האם ניתן לממש את

Page 15: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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)

Page 16: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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צריך לממש את

Page 17: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

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 -מה עם שדות ו

Page 18: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

מימוש

public interface Function { double valueAt(double x); }

Page 19: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

מימוש

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); } }

Page 20: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

מימוש

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); } }

Page 21: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

מימוש

public class ConstantFunc extends LinearFunc { public ConstantFunc(double c) { super(0, c); } }

Page 22: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

מימוש

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); } }

Page 23: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

מימוש

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); } }

Page 24: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

מימוש

public class CosFunc extends Func { }

Page 25: בשחמה יעדמל אובמ - cs.bgu.ac.ilipis151/wiki.files/presentation19.pdf · המישמה:Function קשממה תא תומשיימה תוקלחמ עברא שקבמ חוקלה.(םירטמרפכ

מה בין ממשקים למחלקות אבסטרקטיות :דומה•

שניהם משמשים לתיאור מצב בו לטיפוסים שונים של אובייקטים – .יש מאפיינים משותפים

.שניהם מאפשרים פולימורפיזם– :שונה•

:ממשקים– .תוכנההנדסת • .מכנה משותף לוגי. הגדרת יכולות משותפות לאובייקטים• .ניתן לממש הרבה ממשקים במחלקה אחת•

:הורשה– .שימוש מחדש בקוד• . מכנה משותף טכני יותר• .ניתן לרשת מחלקה אחת בלבד•