לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #5  
ישן 21-07-2009, 22:18
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
בתגובה להודעה מספר 4 שנכתבה על ידי פלוני_1 שמתחילה ב "אני אולי חושב בקטן ועל אתרי..."

כדי להפריך את טענותיך, אקח לשם שום דוגמה דווקא משפת js - שפת תסריט צד לקוח, שבה השימוש במחלקות נפוץ הרבה פחות והיא עצמה אף אינה ממש שפת תכנות מונחית עצמים, היא אינה תומכת כמעט באף אחת מהמאפיינים של תכנות מונחה עצמים, אך אפשר ליצרו בה מחלקות ועצמים ברמה הפשוטה ביותר וזה יספיק כרגע לצורך הדגמה.

א. מקרים שונים:
1. נניח שאתה רוצה לאפשר לגולש "להזיז" אובייקט כלשהו במסמך?
2. נניח שאתה רוצה לאפשר לגולש בחירת צבעים?
3. נניח שאתה רוצה לבצע גלילת תוכן?
4. לוח שנה (חלון של לוח שנה, תאריכים וימים).
וכנ"ל המקרים רבים.

ב. לפי מה שתיארת, אתה פשוט יוצר מס' פונקציות שונות עבור הפעולה (לרוב, לא ניתן לבצע דברים מורכבים בפונקציה אחת), לדוגמה. מקרה 3.
1. פונקציה אחת להפעלת הגלילה.
2. פונקציה להשיית הגלילה.
3. פונקציה לשינוי קצב הגלילה.
4. פונקציה לשינוי כיווניות הגלילה.
5. משתנה גלובלי עבור קצב הגלילה.
6. משתנה גלובלי עבור כיווניות הגלילה.
7. משתנה גלובלי עבור האובייקט - במידה ונדרש, תלוי בצורת התכנות.
8. ועוד משתנים ופונקציות שלא הזכרתי כאן או/ו שלא עולים כרגע בראשי.
עבור כל מקרה כזה, אתה יוצר "חבילת" משתנים ופונקציות רבים!

ג. בשיטת תכנות מונחית עצמים, כל שעליך לעשות הוא ליצור מחלקה אחת המכילה את המשתנים והשיטות הדרושות. וכדי ליצור אובייקט נוסף שיתמוך בפעולות אלו (גלילה, הזזה או אחר), תדרש לרוב שורת קוד אחת! פשוטה כדי ליצור מופע של המחלקה.
אתה מרוויח הרבה בצורת תכנות כזאת. חלק מהתכונות היחודיות בשיטה זו:
1. פשטות ונוחות.
2. ניידות - חסכון עצום בזמן (מספיק ליצור את המחקלה פעם אחת ובעת הצורך להעתיקה לפרוייקטים נוספים).
3. כימוס.
4. שינוי ושיפור הקוד במקום אחד.

ד. דוגמת קוד:
קוד:
//מחלקת גלילה function Scroller(object, objectWrapper, direction, tempo) { var thisObj = this; this.xCoordinate = 0; this.yCoordinate = 0; this.offset = 0; this.tempo = tempo; this.strDirection = direction; this.scrollerStatus = true; this.htmlObj = object; this.htmlObjWrapper = objectWrapper; this.interval; this.htmlObj.style.position = "relative"; this.htmlObjWrapper.style.position = "relative"; // needed to fix an overflow bug in IE7 this.htmlObjWrapper.style.overflow = "hidden"; this.move = function() { if(this.scrollerStatus) { switch(this.strDirection) { //... } } } this.changeDir = function(dir) { thisObj.strDirection = dir; //... } this.start = function() { //... } this.stop = function() { //... } } //מימוש var sideFlashes = new Scroller(sideFlashesMarquee, sideFlashesMarqueeWrap, 'u', 100); sideFlashes.start(); //ואם מתחשק לנו sideFlashes.changeDir('l'); //יש צורך בגלילה עבור אלמנט נוסף? var updatesBar = new Scroller(updatesBarMarquee, updatesBarMarqueeWrap, 'r', 200); updatesBar.start()

נערך לאחרונה ע"י ישראל K בתאריך 21-07-2009 בשעה 22:22.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 22-07-2009, 08:57
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
בתגובה להודעה מספר 6 שנכתבה על ידי פלוני_1 שמתחילה ב "עדיין לא הצלחת לשכנע אותי..."

מחלקות לא נהיו טרנד בזמן האחרון, מה שכן יתכן והשתנה, הוא שלאחרונה אתה, באופן אישי! יותר נתקלת בדיבורים עליה.

אמנם נתתי דוגמה בשפה אחרת ויעוד שונה, אך זה לא פחות מתאים לשפת תסריט בצד השרת.
לדוגמה? מחלקה לטיפול בתמונות.
במקום ליצור אוסף פונקציות עבור טיפול בתמונה, כגון, שינוי גודל, ריפוד, שמירה, הוספת מסגרת, שינוי צבע רקע, מסננים, בהירות, ניגודיות ועוד. ובנוסף לזאת להגדיר בכל פונקציה בנפרד את הטיפול בשגיאות, תמיכה והמרת תבנית הקובץ ועוד.
אתה יכול ליצור מחלקה עם המשתנים והשיטות הנדרשות, ובקטע המעשי, להשתמש בשורת קוד אחת או שתיים לרוב המקרים ומקסימום עוד שורת קוד אחת או שתיים, עבור השימוש בפועל (יצירת מופע וביצוע הפעולה).

קוד לדוגמה:
קוד PHP:
<?php

//מחלקה לדוגמה
class IMG
{
    const 
IMG_NO_ERROR 0;
    const 
IMG_SRC_IS_BIGER 1;
    
//...

    
protected $fileName '';
    protected 
$gdObject;
    protected 
$error = array();

    protected 
$defaultWidth 300;
    protected 
$defaultHeight 250;
    protected 
$defultImgFormat 'jpg';
    protected 
$defultImgQuality 80;

    
/**
     * 0 = not supported
     * 1 = full supported
     * -2 = support only in input
     * -3 = support only for output
     *
     * MIME Reference - http://www.w3schools.com/media/media_mimeref.asp
     **/
    
protected $supportedMimeTypes = array(
        
# images
        
'image/jpeg' => 1,
        
'image/gif' => 1,
        
'image/png' => 1,
        
'image/xpm' => -2,
        
'image/svg+xml' => 0,
        
'image/psd' => 0,
        
//...

        # archives
        
'application/x-rar-compressed' => 0,
        
//...

        # adobe
        
'image/pdf' => 0,
        
//...

        # video
        
'video/mpeg' => 0# mp2, mpa, mpe, mpeg, mpg, mpv2
        //...

        
'text/plain' => 0
    
);

    public function 
__construct($filePath=''$method=''$params=array())
    {
        
//...
    
}

    public function 
save($dstFilePath$format='')
    {
        if(!
$format)
            
$format $this->defultImgFormat;

        switch(
$format)
        {
            
//...
        
}
    }

    
/**
     *
     **/
    
public function resize($newX$newY=null$enlarge=true$pad=false)
    {
        
//...
    
}

    public function 
resizeAndSave($dstFilePath$newX$newY=null$enlarge=true)
    {
        
//...
    
}

    public function 
crop($newWidth$newHeight$leftPoint$topPoint)
    {
        
//...
    
}

    public function 
cropAndSave($dstFilePath$newWidth$newHeight$leftPoint$topPoint)
    {
        if(!
$this->crop($newWidth$newHeight$leftPoint$topPoint))
            return 
false;

        return 
$this->save($dstFilePath);
    }

    public function 
pad($width$height$backgroundColor$widthPosition='center'$heightPosition='middle')
    {
        
//...
    
}

    public function 
addFrame($color$topWidth=1$rightWidth=false$bottomWidth=false$leftWidth=false)
    {
        
//...
    
}

    public function 
brighten($value)
    {
        
//...
    
}

    public function 
genColor($red$green=0$blue=0)
    {
        return 
$red*256*256 $green*256 $blue;
    }

    public function 
getWidth()
    {
        return 
imagesx($this->gdObject);
    }

    public function 
getHeight()
    {
        return 
imagesy($this->gdObject);
    }

    public function 
getGDimage()
    {
        return 
$this->gdObject;
    }

    public function 
export($format='',$quality=false)
    {
        if(!
$format)
            
$format $this->defultImgFormat;

        if(
$quality === false)
            
$quality $this->defultImgQuality;

        switch(
$format)
        {
            
//...
        
}
    }

    public function 
setQuality($quality)
    {
        return 
$this->defultImgQuality $quality;
    }

    public function 
getLastError()
    {
        
//...
    
}

    public function 
getLastErrorCode()
    {
        
//...
    
}

    public function 
getErrorMsg($errorCode)
    {
        switch(
$errorCode)
        {
            case 
self::IMG_NO_ERROR:
                return 
'No Error found';
            case 
self::IMG_SRC_IS_BIGER:
                return 
'The source image is bigger than the required dimensions, see more details in IMG->resize() method documentation';
            
//...
            
Default:
                return 
'Unknown';
        }
    }

    public function 
isFormatSupported($mimeType)
    {
        return (
$this->supportedMimeTypes[$mimeType] == 1);
    }

    
/**
     * ...
     *
     * 0 = not supported
     * 1 = full supported
     * -2 = support only in input
     * -3 = support only for output
     **/
    
public function formatSupportedType($mimeType)
    {
        return (int)
$this->supportedMimeTypes[$mimeType];
    }

    public function 
__destruct()
    {
        
imagedestroy($this->gdObject);
        unset(
$this->gdObject);
        unset(
$this->error);
    }
}

//דוגמת שימוש
$img = new IMG($image_file_name);
$img->setQuality(80);
if(!
$img->resizeAndSave($image_file_name'400''300'false))
    echo 
'Error occure while trying to resize and save the image';

//דוגמה נוספת
if(!$img->crop($dir.$new_file_name$dimensions[0], $dimensions[1], false))
    echo 
'Error occure while trying to crop the image';


בצורת תכנות כזאת, אין לך צורך להמציא את הגלגל מחדש. אתה יכול לנייד את קהוד לכל מקום, לשתף אותו עם אחרים, לשפר, לתקן באג ולעדכן את כל העתקים הישנים של המחלקה (להבדיל מלעבור על קבצים רבים, לחפש את הפונקציות הקשורות והשונות ולתקן בכל אחת בנפרד).

במידה זהה, השימוש הוא עבור כמעט כל דבר אחר בשפה.
מחלקה לטיפול במסדי נתונים. אתה יכול לדוגמה לעבור להשתמש במנוע מסד נתונים אחר או אף במסד נתונים שונה, וכל זה מבלי לגעת בקוד של המערכת עצמה (שהיא מגישה את השאילות ומקבלת תשובות מהמחלקה האחראית).
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 23-07-2009, 13:27
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
בתגובה להודעה מספר 11 שנכתבה על ידי garfiled56 שמתחילה ב "אגב, למה שמת את משתני המחלקה..."

ראשית, המחלקה הזאת משמשת כאן לדוגמה בלבד, ניתן לראות בבירור שאינה מחלקה מושלמת ואף לא מתועדת - כרצוי (הוספתי כן קצת תיעוד, כדי להדגים גם נושא זה).

שנית, למה לא לחשוב על העתיד? אם נגביל את עצמו לכתוב כל קוד רק בהתאם למה שאנו רואים ברגע כתיבת הקוד, נחזור למצב ההתחלתי של אשכול זה: חבל לבזבז זמן ומשאבים על תכנות מונחה עצמים או כל פיסת קוד שאיננו זקוקים לה באופן המידי...
נכון שאולי כרגע אין למחלקה זו מחלקה יורשת, אך רעיונית, משתנה x הוא משתנה שאין מניעה לאפשר שימוש מורחב בו? אז למה שלא נאפשר זאת?!
זאת הגישה הנכונה לדעתי, צריך לחשבו על משמעות ומטרת המשתנה, ובהתאם לכך להחליט אם זהו אכן נתון שהשליטה בו חייבת להיות ע"י המחלקה הראשית (מחלקת האב), או שמא זהו משתנה שאין מניעה למנוע את הרחבת השימוש בו.
בסה"כ, השימוש בו לא הופך מורשה לגישה ציבורית, אלא הוא רק תומך בהרחבת אותה מחלקה ושימושיה.

אם אתה חושב אחרת, נסה להסביר יותר במפורט את הסיבות, כדי שאוכל להבין
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 04:15

הדף נוצר ב 0.08 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר