שלום, רציתי לשאול:

אביטל +

New member
בסיס

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

yuvalzr

New member
רק C!!!!

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

אביטל +

New member
אני יודעת

אבל דיברנו על מאיפה להתחיל ולמה דווקא להתחיל מ C. אפשר להמשיך עם C גם לתכנות מאוד מתקדם, אבל יש לי הרושם שרוב האנשים מעדיפים להמשיך לשפות אחרות כמו C++ Java VB וכו´ ולא להשאר ב C, למרות האפשרות להגיע לרמת תכנות וביצועים מאוד גבוהות. מבחינת רכישת בסיס, C היא המקום להתחיל.
 

אלדד26

New member
זמן לשחיטת פרות קדושות (קדושות??)

שפת C מגדירה SYNTAX לשפה פרוצדורלית פשוטה. מדובר בשפה בעלת 40 מילים שמורות פחות או יותר, וספרייה סטנדרטית של פונקציות שמבצעות פעולות מסוימות כגון קלט/פלט וכו´. להלן כמה פרדיגמות שהתייחסת אליהן והן פשוט לא נכונות: 1. שפת C לא "עובדת על בסיס DOS". שפת C לא עובדת על מערכת הפעלה. שפת C היא הגדרה, וקיימים קומפיילרים של C לכל מערכת הפעלה שמכבדת את עצמה היום. 2. יש מספיק שפות שמגיעות לרמות הביצועים של C. פסקל לפני 3 שנים לא נפלה מ - C בשום היבט. ++C, בכתיבה נכונה, יכולה להגיע לרמות של C. ואני בכלל לא אתחיל לדבר על אסמבלר. 3. היום כמעט כל שפה נותנת לך לעבוד ב - Low-level. מ - C ועד VB, JAVA וכו´. 4. אין שום "בעיית תמיכה בחלונות" ב - C, כי אין שום קשר בין Windows כמערכת הפעלה וכממשק למשתמש לבין C. פונקציות ה - API של WIN32 עובדות עם C, ודווקא לא ברמת OOP, של ++C.
 

voguemaster

New member
LOL ../images/Emo6.gif

אתה גדול
הנה תוספת קטנה: 3. הרבה שפות נותנות LOWLEVEL, אבל עד גבול מסוים.. ובכל זאת ל-C יש יתרון על כל השפות האחרות בנושא הזה (למעט ASM). 4. פונקציות ה-API אכן נועדו לעבוד עם C, ולאו דווקא עם מודל OO, למרות שזה אפשרי. מהסיבה הזו המציאו את MFC, שמספקת פונקציונליות של WIN בעזרת מחלקות (CLASSים, רבאק עם העברית הזאת!
). כמובן שאפשר לכתוב OO גם ללא MFC, אבל אם כבר אז כבר.. בקיצר, לא להתייחס, אלדד צודק
אלי
 

Scipio

New member
שפות פרוצדרליות - אפשר אבל לא כדאי

לא כדאי לבזבז זמן על לימוד שפה בשביל לעבור לשפה אחרת. אופן הכתיבה יכול להיות OO גם ב C ואפילו ב ASSEMBLY השאלה כמה השפה עוזרת לך. אפשר לכתוב גם פרצדורלי ב JAVA ואפשר לכתוב גם OO גרוע ב JAVA (זה מה הרבה מאד עושים) צריך ללמוד OOAD (Object Oriented Analysis and Design בלי קשר לשפת הישום. ה API הנרחב מאפשר 1. שימוש בפרימיטיבים נרחבים מאד 2. לראות קוד וטכניקות ל OO (ב JAVA הרבה מה API כתוב בצורה יפה מאד) 3. להתחיל לראות תוצאות מעניינות מהר. לגבי המשחק הראשוני של A+B אפשר לעשות גם ב JAVA. היתרון של כלים (IDE וכולי) הוא עדיין לטובת C / C++ / C# אבל הי...
 

רפי2002

New member
את רב המושגים שרשמת

אני לא מכיר... :) אני פשוט רוצה ללמוד שפת תכנות....השאלה גם, מה זה יעזור לי? אם זה בכלל יעזור...
 

yair24

Member
אם אתה רוצה את העצה שלי...

אני הייתי מציע לך להתחיל ללמוד C ולא C++ בצורה הבאה: תוריד קומפיילר פשוט, תתקין אותו, ותתחיל ללמוד מאיזה ספר. חשוב שתבין את מה שאתה לומד ולא סתם להעתיק תוכניות ולהריץ אותם, כי מזה לא תלמד כלום. על כל תוכנית שאתה מעתיק אתה צריך לדעתי לכתוב שלושה תוכניות משלך שמתבססות על התוכנית שהעתקת. אם אתה מעוניין באתר ללימוד C למתחילים אז הנה:
 

אלדד26

New member
וואו...

אתה מוזמן להציג לי איך אסמבלי תומכת ב - OO. אשמח לדעת. אם אתה לא כותב את כל המנגנונים - כמו תחזוקת Virtual tables, למשל - אז איך בדיוק תיישם OO באסמבלי? או ב - C? אני מצפה ציפיה דרוכה להסבר.
 

gilad_no

New member
אולי עם מצביע לפונקציה ? ../images/Emo6.gif

Function1: ret Function2: ret mov dx,@Function2 call dx סתם בצחוק ...
 

galh

New member
זה אפשרי

תשיג את הספר Mastering Turbo Assember של Tom Swan, יש שם פרק שלם שמוקדש לפיתוח OO בטורבו אסמבלר (גרסא 5, אם אני זוכר נכון).
 

אלדד26

New member
אנשים, אנשים,

להתעורר. אסמבלי היא לא שפה OO-ית. OO זה לא קסם. זו תשתית שמאפשרת לכם לעשות OO DESIGN. זו תשתית שאתם מסתמכים עליה. כשאתם כותבים virtual, אתם יודעים שהפונקציה "הנכונה" תיקרא, כי הקומפיילר יודע לבנות לכם VTable. ברור שאפשר לעשות VTable לבד (ועוד חמישים אלף דברים אחרים). ברור שאפשר לכתוב את אותו class חמישים פעמים במקום להשתמש ב - template. אבל זה כל הקטע ב - OO. התשתית מספקת את זה לכם, בלי שתצטרכו לכתוב. אז לא, אני באמת מצטער. לא מתכנתים ב - OO ב - C או באסמבלי, נקודה. אתם יכולים לכתוב חבילת תוכנה שבעזרתה תכתבו OO "ב-C". אבל אז זה יהיה יותר ++C ופחות C.
 

galh

New member
לא רק שאני ער, אני גם מעודכן!

אם הקומפלייר מאפשר לך לכתוב קוד באסמבלר וגם מאפשר לך לעבוד עם העקרונות הבסיסיים של תכנות מונחה-אובייקטים (הסתרה, הורשה וריבוי צורות) אז קיבלת שפת אסמבלי שתומכת ב- OO. נקודה! בגרסא 6 של MASM הוסיפו "פקודה" בשם INVOKE (נכון, לא הוראת אסמלי "טהורה") שמאפשרת לך לקרוא לפונקציות API של חלונות בקלות (מבלי לדחוף למחסנית את כל הפרמטרים). אז מה? אתה תבוא ותגיד לי "INVOKE זה לא הוראה של המעבד אז תוכנית שכתבת היא לא באסמבלר"? וסתם לידע כללי, ל- Template אין שום קשר לתכנות OO.
 

אלדד26

New member
אויש, נו.

בבקשה. קודם כל, בוא ותסביר לי: איך אתה עושה inheritance באסמבלי? נו, זה מגוחך בשבילי לכתוב את השאלה המטופשת הזו בכלל, אבל נראה מה תענה. דבר שני, אפשר בהחלט להתווכח האם INVOKE מפירה את החוקיות של אסמבלי, כי אסמבלי לא כוללת את INVOKE. ההגדרה של אסמבלי היא בפירוש שכל פקודה תתורגם לפקודה אחת בשפת מכונה. אם תכתוב תוכנית C שהיא 80 אחוז עם פקודות ASM, אז כתבת תוכנית C? אסמבלי? מה כתבת? ל - template יש קשר לתכנות OO כי template מיישם reusability, אחד מאבני הבניין של OOP.
 

galh

New member
הסברים תקרא בספר

זנחתי את התכנות באסמבלר לפני כמה שנים, כך שאני לא יכול לתת לך הסבר מלא (אלא אם ממש תתעקש ואז אולי אני אחפש את הספר). אני ציינתי את העובדה שזה אפשרי. אין שום הגדרה שאומרת שכל פקודה תתורגם לפקודה אחת בשפת מכונה. יש מקום לתוספות של הקומפלייר והלינקר (כולל אופטימיזציה לקוד). כך שאם אני כותב תוכנית C שכוללת כ- 80 אחוז קוד של אסמבלי, אני כותב תוכנית ב- C (משתמש ביכולת של הקומפלייר לטפל בעניינים כמו קריאה לפונקציות) ומשתמש באסמבלי בשאר הקוד. מה בדיוק הנקודה שלך? שאסור לשלב קוד? ל- OOP יש *רק* שלוש הגדרות ושימוש חוזר הוא לא אחד מאבני הבניין שלו. הרצון לשימוש חוזר של קוד יצר צורך שנענה ע"י OOP. והוכחה לכך היא ש- template ממומש רק ב- ++C ולא באף שפת OO אחרת (SmallTalk, Java).
 

אלדד26

New member
מותר לשלב קוד,

אבל אתה לא יכול לומר על קוד כזה שהוא אסמבלי מובהק.
 

galh

New member
מסכים... (אבל)

נכון, אני לא יכול להגיד שזה קוד אסמבלי מובהק, אבל (פה נכנס ה- "אבל") שפות זה דבר שמתפתח ומתקדם עם הזמן כך שיש לך תוספות והרחבות של השפה. קח לדוגמא את פסקל ובמימוש שלה ע"י Turbo Pascal האגדי. בגרסא חמש וחצי שלה נוספה תמיכה לאובייקטים ותכנות OO. עכשיו, אתה יכול לבוא ולהגיד שזו לא תוכנית פסקל מובהקת (שאמורה להיות שפת תכנות פרודורלית) או שאתה יכול להשתמש ביכולת החדשה, לפתח תוכנות ביותר קלות ולהמשיך להגיד "אני מתכנת בפסקל". דרך אגב, ההסבר על תכנות OO באסמבלר נמצא בפרק 14 בספר Mastering Turbo Assember של Tom Swan.
 

אלדד26

New member
ברור שזה לא פסקל

זה פסקל עם OWL. וזה בדיוק כמו שתשתמש ב ++C ותגיד שאתה מתכנת ב - C...
 

galh

New member
כן, זו עדיין שפת פסקל.

לא התכוונתי ל- OWL אלא להוספה של מילות מפתח חדשות לשפת פסקל. מילות מפתח שמגדירות מחלקות, אובייקטים, שיטות ורטואליות וירושות.
 

אלדד26

New member
אוקיי, שוב...

פסקל, C. הוסיפו תכונות OO, הוסיפו תכונות OO. השאירו את השם כפסקל, שינו את השם ל - ++C. בקיצור, הכל שאלה של NAMING. נוצרה "שפה חדשה" שהיא ++C, ובמקרה של פסקל, בגלל שלא מדובר בסטנרט גורף אלא בהמצאה של בורלנד, אז השם לא השתנה ולא נוצרה ++PASCAL. אבל הכל שאלה של כינויים. אם אתה כותב ב - ANSI C, אז אין לך שום תוספות לשפה. אותו הדבר לגבי אסמבלי, ואותו הדבר לגבי פסקל. ולגבי אסמבלי במיוחד, זו הגדרה סופר מדויקת: *כל* פקודה מתורגמת לפקודה *אחת בלבד* בשפת מכונה. אין מצב אחר, אין אופציות אחרות. אם השתמשת ב - INVOKE, כתבת תוכנית שבסיסה אסמבלי, אבל אתה לא יכול לומר שכתבת Pure assembly. אותו הדבר לגבי המצאות משונות להכנסת OO לאסמבלי. שפת המכונה של המחשב לא תומכת ב - OO. זה שאתה יכול לכתוב מקרואים ורוטינות שיעזרו לך לפתח באסמבלי עם OO זה טוב ויפה. בהגדרתה של השפה אין OO, נקודה.
 
למעלה