advanced programming - lectures

25
2 תכנות מתקדם.2013 מבוסס על הרצאות של ד"ר מירי בן ניסן, אוניברסיטת בר־אילן1

Upload: shadowmanzz

Post on 27-Nov-2015

44 views

Category:

Documents


11 download

DESCRIPTION

Advanced programming in Java lectures - taken by Elia Grady at the university of bar Ilan

TRANSCRIPT

Page 1: Advanced Programming - Lectures

2 מתקדם תכנות

.2013 בר־אילן אוניברסיטת ניסן, בן מירי ד"ר של הרצאות על מבוסס

1

Page 2: Advanced Programming - Lectures

1 שיעור

הקדמה

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

שיטות תכנות, עקרונות בסיסית, תוכנה הנדסת זיכרון, ניהול הקומפילציה, תהליך על למדנו הקודם, בקורסעל למדנו ובנוסף ועוד) XP ,Scrum ,Agile) לתכנות גישות סוגי ,(Javaב־ "זבל" איסוף (דוגמת זיכרון לניהול

.Kernel Mode VS User Mode VS User Mode

נלמד: זה, בקורס

"טוב"?) לקוד יחשב (מה טוב. יותר קוד לכתוב כיצד •

מבוזרות. ומערכות מקבילי1 תכנות של בסיסים עקרונות •

.C++ בשפת מתקדמות אפשרויות ניצול •

מתקדמות. Debugging טכניקות •

עבודה. לראיונות וטיפים שאלות •

יותר טוב קוד כתיבת

"רע": קוד לעומת "טוב" קוד בין ההבדלים על לעמוד ננסה ראשית,ריצה. זמן שגיאות גרוע: הכי או Linkage שגיאות קומפילציה, שגיאות להכיל עלול "רע" קוד

טובה. בצורה המתכנת כוונת את ומתאר להבנה קל כלל בדרך יהיה "טוב" קוד

MISRA− C

קווים המספק ארגון שהוא Motor Industry Software Reliability Association הוא: MISRA המילה פירושהרכב. יצרני תעשיית עבור תוכנה ייצור עבור מנחים

הבטיחות רמת היא זו לדרישה הסיבה .C בשפת המתמקד תוכנה לפיתוח מנחים) (קווים סטנדרט הוא MISRA Cאדם. חיי לאובדן להוביל עלול ברכב תוכנה וכשל מרכבים, הנדרשת

המלצה. בגדר מהם ו־20 חובה כללי נחשבים כללים 122 ,2004 בשנת שפורסם במסמך הכללים 142 מתוך

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

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

לשגות" עלול מתכנת "כל

בצוותים. כלל בדרך נוספים, אנשים עם תכנות 1

2

Page 3: Advanced Programming - Lectures

במקום ′ =′ השמה באופרטור שימוש לדוגמה, קוד, של בכתיבה בקלות לשגות מאפשר C שפת של התחבירוכו'. ′if ′ פקודת לאחר מיותר ′;′ כתיבת ,′ ==′ השוואתי אופרטור

לדוגמה:

i f ( x==0) ;doHorr ib leThings ( ) ;

השפה" את להבין לא עלול מתכנת "כל

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

5 ∗ 4 + 3 = 23i =! i > 14 = 01 << 2 + 4 = 3a & 0x0F <= 0x07 = 0a=5; b = a+ ++a ; = 12

אליהם" התכוון לא שהמתכנת דברים לבצע עלול "הקומפיילר

שונה. באופן אותם לבצע עלולים שונים קומפיילרים כך ועל היטב, מוגדרים אינם אשר C בשפת תחומים ישנםביטים. 16 יהיה תמיד INT16ש־ בעוד להשתנות, עלול בביטים int גודל לדוגמה,

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

void f ( int a , int b) ;int i = 1 ;f ( i ++, i /2) ;

.f (2, כ־(0 יחושב הוא Unix שבסביבת בעוד Visual Studio ב־ f (2, 1) כ: יחושב f(i+ +, i/2); הביטוי

שגיאות" להכיל עלול "הקומפיילר

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

.Null פויינטר להחזיר פשוט עלול והוא ,Visual C++ב־ bad_alloc יזרוק תמיד לא ”new” האופרטור לדוגמה,.ANSI C++ של הסטנדרט לפי המצופה ההתנהגות זו אין שכן ,Microsoft של בקומפיילר באג זהו

(http://support.microsoft.com/?kbid=167733 כך: על עוד (קרא

3

Page 4: Advanced Programming - Lectures

ריצה זמן שגיאות

קטן בד"כ Cב־ שנכתב קוד זו מסיבה ריצה. זמן שגיאות בדיקת מתן מבחינת גרועה לשפה כלל בדרך נחשבת Cשל קומפיילרים הרצה). (לפני מועד מבעוד שגיאות וזיהוי קוד ניתוח בדוגמת שמשלמים המחיר זהו אך ויעיל יותר,stack overflow ב־0, חלוקה דוגמת אריתמטיות שגיאות עבור ריצה זמן בדיקות מספקים אינם כלל בדרך C שפת

ממערכים. חריגה או פוינטרים של הכתובות אימות

קריא קוד כתיבת

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

מוסכמות פי על ופונקציות משתנים למחלקות, שמות מתן

,CONSTANT_VALUES_IN_UPPERCASE,ClassNamesStartsWithCapitals

,variableNamesStartsWithLowercasem_memberVariabless_staticVariablesg_globalVariables

:Scope מבחינת המשתנה של ה"נראות" את המציינות קידומות

methodName()MethodName()method_name()

שונות: מוסכמות לפי פונקציות שמות לכתוב דרכים

הקוד כתיבת סדר

אלפבתית. בצורה ולא זה, בסדר בקוד זאת נכתוב ,אנו ופלט הקלט על שינויים בקלט, עוסק שלנו הקוד כאשרהפלט. ומהו הקלט מהו להבהיר מנת על OUT ו־ IN במילים נשתמש נוכל, כאשר

בפונקציות בפרמטרים שימוש

הישירים: החישובים עבור לנו שהועבר בפרמטר נשתמש ולא לנו, שסופקו הפרמטרים בכל נשתמש אנו

WRONG:int Sample ( int inputVal ) {

inputVal += CurrentFactor ( inputVal ) ;inputVal ∗= M u l t i p l i e r ( inputVal ) ;

. . .return inputVal ;

}

4

Page 5: Advanced Programming - Lectures

RIGHT:int Sample ( int inputVal ) {

int l o c a l V a l = inputVal ;l o c a l V a l += CurrentFactor ( l o c a l V a l ) ;l o c a l V a l ∗= M u l t i p l i e r ( l o c a l V a l ) ;

. . .return l o c a l V a l ;

}

Hungarian Notation הונגרית" ב־"נוטציה שימוש

המשתנה: של המטרה או הסוג את מציינות אשר lowercase מסוג אותיות או באות מתחילים משתנים שמות

ulAccountNum : variable is an unsigned long integerszName : variable is a zero terminated stringbBuzy : variable is booleancApples : count of itemsiSize : integer or index

הקוד! לקריאות הכרחי קוד של נאות עימוד בנוסף,מ: פחות קריא 3.14159265 ∗ r ∗ r לדוגמה: הקוד, קריאות על מקשים אשר בקוד, קבועים הם קסם" "מספרי

const int PI = 3.14159265 קבוע: זה להגדיר צריכים שהיינו מה וכל ,PI ∗ r ∗ r

5

Page 6: Advanced Programming - Lectures

Defensive Programming ־ הגנתי תכנות

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

.Proactive Debuggingכ־ גם

דבר! להניח אין הגנתי: בתכנות הראשון החוק

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

הריצה: בסביבת תלוי להיות עלול הוא שכן פרימיטיבי, משתנה של גודלו מהו להניח שאין נזכיר זה, חוק בתוך.(embedded? 64 bit desktop?) העבודה לסביבת בהתאם ביטים, 64 או 8, 16, 32 להיות יכול integer לדוגמה:

זאת. לאמת מנת על limit.h וב־ sizeof בפונקציית נשתמש

/* Minimum and maximum values a ‘signed char’ can hold. */

# define SCHAR_MIN (-128)

# define SCHAR_MAX 127 /* Maximum value an ‘unsigned char’ can hold. (Minimum is 0.) */

# define UCHAR_MAX 255 # define SHRT_MIN (-32768)

# define SHRT_MAX 32767 /* Maximum value an ‘unsigned short int’ can hold. (Minimum is 0.)*/

# define USHRT_MAX 65535 /* Minimum and maximum values a ‘signed int’ can hold. */

# define INT_MIN (-INT_MAX - 1) # define INT_MAX 2147483647 /* Maximum value an‘unsigned int’ can hold. (Minimum is 0.) */

# define UINT_MAX 4294967295U ...

בסנטדרטים! שימוש הגנתי: בתכנות השני החוק

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

ברשת. שפה כל עבור שונים סטנדרטים שיש משום וזאת סטנדרטים ריבוי ישנו כיום

הניתן! ככל פשוט קוד על שמירה הגנתי: בתכנות השלישי החוק

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

קוד. לכתוב שמתחילים לפני התוכנה, שלסיבות: מכמה טובה בחירה זו בקוד, מחדש שימוש

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

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

מיותר! קוד איןhttp://googlestyleguide.googlecode.com/svn/trunk/cppguide.xml נוספת: לקריאה

6

Page 7: Advanced Programming - Lectures

קוד בכתיבת נפוצות בעיות

HandleStuff() מובנים: ולא נכונים לא שמות מתן •

בתיעוד חוסר •

נאות) עימוד (אין קוד של גרועה פריסה •

by − reference רבים שינויים •(http://www-cs-students.stanford.edu/~sjac/c-to-cpp-info/references עוד: (קרא

בודדת בפונקציה מדי מורכבות משימות ביצוע •

גלובליים משתנים •

0 להיות העלול במשתנה חלוקה •

וכו') π, e (דוגמת קסם" "מספרי •

(?by − value להעביר לא מדוע יתרון! שום לזה (אין בלבד לקריאה by − reference העברה •

בתעשייה מוסכמות

החוזר! הסטטוס את תמיד לבדוק יש ,(status) סטטוס שמחזירות פונקציות עבור •

הניתן. ככל הסטנדרטיות בספריות שימוש •

.Nullל־ אתחול לבצע תמיד יש מצביע, על מצהירים כאשר •

בקוד. שגיאות על יותר מתריע אינו שהקומפיילר לאחר רק לשלם יחשב קוד •

.malloc,realloc or free דוגמת ישירות זיכרון במניפולציות להשתמש אין •

ווירטואליות. כמתודות D′tors על תמיד להצהיר יש •

בודד). משפט עבור (גם תמיד מסולסלים בסוגריים להשתמש יש ולולאות תנאי במשפטי •

יותר. גבוהה בסבירות אמת ערכי מקבל A כי נבטיח , A ||B מסוג תנאי עבור קוד: של אופטימיזציה •

2 שיעור

Defensive Programming הגנתי תכנות

את הניתן ככל לצמצם נרצה ולכן ,Debuggingה־ הוא תוכנית בכתיבת והאיטי הקשה החלק מוטיבציה: ראשית,להשיג ניתן איך גישות כמה ישנן מהיר. באופן עובד קוד של כתיבה היא לפיכך מטרתנו שגיאות. לעשות האפשרותכדי זאת. עושים עדיין אנו שגוי שזה יודעים שאנו למרות וכו'. העתק־הדבק קצר, בזמן מרובה קוד כתיבת זאת:למצוא יותר קל שכן הקוד בקריאות משקיעים אנו הקוד, על שישב הבא המתכנת או אנו בו הזמן את לצמצם

יותר. קריא הקוד כאשר שגיאות

7

Page 8: Advanced Programming - Lectures

משתנים

תמיד! המשתנים את לאתחל יש ראשון: חוק

3 שיעור

4 שיעור

5 שיעור

6 שיעור

7 שיעור

8 שיעור

9 שיעור

10 שיעור

Android Programming ־ אנדרואיד תכנות

היא .(Linux Kernel) לינוקס ליבת על המבוססת ניידים למכשירים המיועדת הפעלה מערכת היא אנדרואידהמפתחות חברות 65 של עסקית (ברית Open Handset Alliance עם פעולה בשיתוף ,Google חברת ע"י מופצת

סלולרית). לתקשורת פתוחים סטנדרטים.Dalvik ושמה למערכת, במיוחד שפותחה וירטואלית ג'אווה מכונת נמצאת זו הפעלה מערכת של במרכזה

מעקף תוך גם למערכת להתממשק אפשרות למעשה קיימת ג'אווה. ספריות דרך הוא האנדרואיד למערכת הממשק.c/c+ + בשפת ,Native Development Kit, NDKב־ ושימוש JVMה־

8

Page 9: Advanced Programming - Lectures

(2013 ליולי (נכון לדורותיהן אנדרואיד גרסאות

9

Page 10: Advanced Programming - Lectures

Android Architecture ־ אנדרואיד ארכיטקטורת

שכבות: מספר כולל אנדרואיד של התוכנה חבילת מבנה

קוד שכבת יש מעליה, .(Drivers etc.) החומרה עם התממשקות על האחראי לינוקס, של Kernel ישנו בבסיס,Dalvik הווירטואלית, המכונה את למצוא ניתן מעל, בשכבה .C/C + + בשפות הכתובות מוכנות, ספריות של

.Dalvik code מסוג קבצים להריץ מסוגל אשרמכן ולאחר Java Byte Codeל־ הידור עובר המקור קוד .Java בשפת כלל בדרך כותבים אנדרואיד עבור תכניותתכניות לכתוב לנו המאפשרות Javaב־ ספריות ,Frameworkה־ נמצא Dalvik מעל .Dalvik Codeל־ זה קוד

ההפעלה. במערכת שימוש עושות אשר

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

Native Libraries ־ טבעיות ספריות

.Java ממשקי דרך אליהם להתממשק ונוכל ,C/C + + בשפות נכתבובמקומה. תוצג תהליך מכל הגרפיקה שכל אחראי : Surface Manager

10

Page 11: Advanced Programming - Lectures

.GPUה־ את ולנצל 3Dו־ 2D לשלב מנת על חומרה בהאצת להשתמש ניתן :openGL/SGLוידאו או שמע של אפשרי (coder − decoder) codec כל :Media framework

אפל. של Safariו־ גוגל של Chrome את המניע פופולרי דפדפן מנוע :Webkit

Core Libraries ־ הליבה וספריות Dalvik Virtual Machine ־ הווירטואלית המכונה

סוללה וחיי עיבוד כוח (זיכרון, embedded לסביבת מותאמת ,Dalvik הנקראת אנדרואיד של הווירטואלית המכונהמוגבלים).

מהווים dex קבצי .(Jarל־ (המקבילים dex לקבצי class קבצי של המרה מתבצעת dx בשם תוכנית באמצעותמכווץ, אינו הוא כאשר גם אחת. פעם רק מופיע כפול מידע כל .(Dalvik executable)DVMה־ עבור byte codeדבר שונים. תהליכים בין מידע שיתוף מאפשר שהוא כך מסודר Dataה־ מבנה מכווץ. Jar מקובץ יותר קטן הוא

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

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

,2.0 מגרסה החל זמין הוא מתמשך. בפיתוח נמצא והוא ביצועים לשפר נועד (just in time) ,JIT ה־ מנגנוןמשמעותי. ביצועים לשיפור הביא זה מנגנון 2.2 ובגרסה

ה־ הטבעיות, הספריות עם מתקשרים אנו ודרכן Java בשפת כתובות , Core Librariesה־ הליבה, ספריות.Native Libraries

11

Page 12: Advanced Programming - Lectures

Application Framework ־ האפליקציות מסגרת

.Androidב־ האפליקציות לכתיבת התשתית את ומהווה Java בשפת כולו כתובהאפליקציות. של החיים מעגל לניהול אחראי :Activity Manager

המותקנות. האפליקציות לניהול אחראי :Package Mangerאחרות. אפליקציות עם מידע לשתף אפליקציה לכל מאפשר :Content providers

12

Page 13: Advanced Programming - Lectures

Applications ־ אפליקציות

אפליקציות כמה עם מגיע אנדרואיד עצמן. האפליקציות ישיר: משתמש לקלט החשופה ביותר, העליונה השכבה זוהיכותבים אנו זו בשכבה וכו'. Browser , (Launcherכ־ גם (מוכר Home ,Contacts , Phone דוגמת מוכנות,

קודמות). (שכבות הקיימת בתשתית שימוש תוך ,Java בשפת שלנו, האפליקציות את

13

Page 14: Advanced Programming - Lectures

Android Architectural Pattern ־ אנדרואיד של ארכיטקטונית תבנית

entry המהווה mainה־ פונקציית דרך היא וההפעלה הגבלות שום לנו אין בו בג'אווה, רגיל קוד לכתיבת בניגודואנו מובנית, ארכיטקטורה לנו יש כלומר , Framework-based architectures תחת נעשית כאן הכתיבה ,pointכל את כבר עבורנו הגדירו שני ומצד אותנו מגבילה זו דרישה אחד מצד וכו'. אותה להרחיב לתוכה, לכתוב יכוליםמסגרת ליצור החליטו אנדרואיד בתכנון בג'אווה, המוגדרים ,frameworks מסגרות, מספר שיש למרות הסביבה.

הציבה. שהמסגרת וכד' זיכרון מגבלות להסיר מנת על בעיקר משלהם, חדשהלו ואין במידה אותו משחרר היה Garbage Collectorשה־ עד בזיכרון "חי" היה אובייקט רגילה בתכנית אםforegroundב־ רץ אינו אותו שהגדיר GUIשה־ ברגע להשתחרר יכול אובייקט באנדרואיד ,rootמה־ התייחסותכרגע נמצא שלא תהליך עבור גם אלא אובייקט עבור רק לא נכון זה דבר המסך). על כעת המוצגת (האפליקציהע"י מפורש באופן רק ייעשה השיתוף תהליכים. בין מידע שיתוף שום אין באנדרואיד זו, עובדה בגלל .frontב־,foregroungב־ לרוץ עבר B אפליקציה כאשר חיה A אפליקציה כי להניח למתכנת שאסור מכאן, מידע. בקשת

עוד. קיים לא A כי שייתכן משום

אפליקציה של lifecycleל־ הקשורות מתודות ישנן אנדרואיד של במסגרת האפליקציות, בין לעבור שנוכל מנת על.Activity או

14

Page 15: Advanced Programming - Lectures

Model-View-ViewModel ־ MVVM תבנית

Businessה־ של הפיתוח לבין GUIה־ שכבת של הפיתוח בין ברורה הפרדה ליצור הנועד Design Patten זהוכמודל. גם המוכר Back end logicה־ או Logic

במובן מידע. מהם ולשלוף אותם לנהל קל שיהיה כך מהמודל Data objectsה־ של החשיפה על אחראי V iewה־התצוגה. של הלוגיקה רוב את מנהל והוא בעצמו Modelל־ דומה יותר הוא V iewה־ זה,

העיצוב לבין GUI של הלוגיקה של בקוד ערבוב יש בהם ,Swing או MFCב־ שיש הבעיה את לפתור בא זה דברעצמו. GUIה־ של הגרפי

יותר: ברור באופן אחריות תחומי הפרדת ע"י אלו בעיות פותרת הארכיטקטורה.XML ייצוג דוגמת זה, לנושא שקרובה בטכנולוגיה GUI מעצב ע"י נעשה GUI עיצוב

ע"י מתבצע כזה לוגי קשר ."V iewל־ השייך "המודל שמשמעותו V iewModel מפתח ע"י נעשית GUI לוגיקתישירות להיכתב יכולה כזו קשירה . onButtonAClick() למתודה A כפתור על לחיצה בין (Binding) קשירה

"הצהרתית". בצורה או לקוד

באנדרואיד עיצוב פילוסופיית

במהירות מגיב מועט, וזיכרון חלש מעבד לנו יש שכן ־ מהירות להיות: צריכות לאנדרואיד המפותחות אפליקציותההרשאות על מצהירה אפליקציה כל ־ מאובטחת שניות, 5 היותר לכל לקחת צריכה משתמש לפעולת תגובה ־כמקשה להשתלב צריכה האפליקציה המפתח: היא שימושיות ־ המשכי ,(manifest) בתצהיר שלה לריצה הדרושות

האנדרואיד. למערכת אחת

Android 101 ־ אנדרואיד של יסוד מושגי

.Activity הוא מסך כל .Activity היא (UI) המשתמש ממשק על תצוגה כל ביותר. הבסיסי הרכיב :Activityאחראי Activity כל עצמה. בפני Activity היא מהן אחת שכל תצוגות, של סדרה לכלול יכול עצמה האפליקציה

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

מחזיקה במערכת. שרצים Activitiesה־ כל של והניהול הקישור על האחראית מחלקה :ActivityManagerדרכה. אליהם לגשת שניתן כך הפעילים Activitiesה־ רשימת את

בתוך אלמנטים עם קשר ליצור ניתן זה מנגנון בעזרת במערכת. הודעות מועברות שבאמצעותו מנגנון : Intentלה. ומחוצה האפליקציה

דוגמאות:

הרצוי. Activityה־ להפעלת Intent שליחת ע"י שנעשה התצוגה, מסכי בין מעבר •

.Activities בין נתונים העברת •

אחרים. שירותים עם קשר ויצירת אימייל, שליחת לדוגמה האנדרואיד, מערכת של לשירותים גישה •

הפלטפורמה. על הקיימים ג' צד למודולים גישה •

במערכת. Broadcast הודעות העברת •

15

Page 16: Advanced Programming - Lectures

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

Intent Filterה־ ע"י מכוונת היא שבה הפרמטרים לפי אך ההודעה, יעד את מציין לא השולח , (Implicit) במרומזההודעה. של היעד זהות את מראש לדעת צורך אין בו גמיש, קוד מאפשר זה מנגנון ליעדה.

יכול השירות .UI ללא ־ כלומר משתמש, אינטראקציית ללא ברקע שרצה פעילות היא שירות : Serviceנגן דוגמת ברקע, הרצות לפעילויות המתאים ,Service Intentה־ בעזרת ,UI יש שלו ,Activityמה־ פקודות לקבל

וכד'. שעון טיימר, מוזיקה,

האפליקציה של המידע אחרות. אפליקציות עם מידע לשתף לאפליקציה המאפשר רכיב : Content Providersמועברות content providerה־ דרך וכו'. (DB) SQLite מרוחק, שרת קובץ, על דרכים: במגוון להשמר יכול

.ContentProvider הממשק את מממש הרכיב ההרשאות. את מגדיר והוא השאילתות

המסך לכולם: הנוגעת הודעה למשל, .system-wide הודעות הפצת על האחראי רכיב :Broadcast receiversאובייקט מעבירה הודעה וכל BroadcastReceiver את מממשת זו שמבצעת המחלקה וכו'. נגמרת הסוללה כבה,

.Intent מסוג

אפליקציה של החיים מחזור

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

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

16

Page 17: Advanced Programming - Lectures

17

Page 18: Advanced Programming - Lectures

Serviceו־ Activity של החיים מחזור

מתודות של בהפעלתן ביטוי לידי בא אשר חיים מחזור יש ,Services לשירותים, וגם ,Activities לפעילויות, גםלאחר. אחד משלב במעבר שונות

Service lifecycle Activity lifecycle⇓ ⇓

משלב במעבר יבוצע אשר קוד נכתוב זו בדרך .Override ע"י מחדש אותן לממש ונוכל אלו, מתודות את נכיר אנולאחר. אחד

לאחר המסך על Activityה־ הופעת עם מופעלת onResume המתודה :onStartו־ onResume המתודותאותו נמקם המסך, על מופיע שהוא ולפני Activityה־ הפעלת עם מיד שיתבצע שנרצה קוד .onStart הפעלת

.onResume במתודה נמקם המסך, על Activityה־ הופעת עם מיד שיתבצע שנרצה קוד .onStartב־

ה־ על תופעל אחר, Activityל־ לעבור בוחר המשתמש כאשר :onResume ו־ onStop , onPause המתודות.onStop המתודה תופעל אזי המסך, על מופיע לא כבר Activityה־ אם .onPauseה־ מתודת הפעיל Activity

פעילותו. את יחדש Activityה־ כאשר שיתבצע רוצים שאנו הקוד את בד"כ נמקם onResume במתודהאת מסיים המסך על שמופיע Activityוה־ הקודם, Activityל־ חוזר הוא back כפתור על לוחץ משתמש כאשרעל יופיע והוא onResume עליו תופעל אזי ,onPause הפעולה רק הופעלה הקודם Activityה־ ועל במידה חייו.את לסיים בחרה ההפעלה מערכת כן וכמו onStop וגם onPause גם הופעלה Activityה־ ועל במידה המסך..onResumeו־ onStart המתודות תופעלנה מכן לאחר ורק onCreate המתודה Activityה־ על תופעל אזי חייו,

המסך. על מוצג לא כבר Activityשה־ לאחר רק מופעלת onStop המתודה :onDestroyו־ onStop המתודותאין .Activityה־ חיי את לסיים מחליטה ההפעלה ומערכת במידה מכן, לאחר מיד מופעלת onDestroy המתודה

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

18

Page 19: Advanced Programming - Lectures

מופעלת זו מתודה המשתמש. ממשק ליצירת שאחראי הקוד את כלל בדרך נמקם זו במתודה :onCreate המתודהאחת. מפעם יותר יתבצע לא המשתמש ממשק ליצירת שהקוד כך בלבד2, אחת פעם

דוגמה

על לחצנו קישור. בו וראינו אותו הצגנו ,inboxמה־ מכתב בחרנו ,Gmail בחרנו Home שמאפליקציית נניחתצוגת אפליקציית את שפותח עליו, שלחצנו למפה קישור יש זה בעמוד קישור. באותו נפתח והדפדפן הקישור

אחורה. לחזור רוצים אנו כעת .(Maps) המפות

ה־ מחסנית את שמנהל Activity Managerה־ את שמריץ System Processה־ תהליכים: 2 קיימים בתחילה,ביניהם: ולדפדף אפליקציות לבחור למשתמש המאפשר ,Home Activityה־ את שמריץ ותהליך Activities

תהליך ונפתח Activity Managerב־ נשמר Homeשל־ stateה־ :gmail אפליקציית את מפעיל המשתמש כעתכולו: המסך על נראית שכעת המכתבים רשימת את שמציגה Activityה־ שבו Mail חדש,

Mailה־ של לתהליך חדשה פעילות ומתווספת נשמר Mail Listה־ של stateה־ כלשהו: מכתב בוחר המשתמש כעתהמסך: כל על נראה שכעת המכתב תוכן את מציגה אשר

שוב המשתמש ממשק את ליצור ויש חייו, את שסיים Activityל־ אחורה לחזור מבקש המשתמש בהם מקרים למעט 2

19

Page 20: Advanced Programming - Lectures

ובתוכו Browserה־ למען חדש תהליך ונוצר נשמר ההודעה ה־stateשל במכתב: קישור על לוחץ המשתמש כעתהמסך: כל על מוצג שכעת Browser של Activity

אפליקציית את לפתוח נרצה נשמר. Browserה־ של stateה־ מפה: לפתיחת קישור על לוחץ המשתמש כעתנוספים! לתהליכים מקום אין כעת אך Mapsה־

תהליך את גם אפליקציות. בין דפדוף לצורך למשתמשים זמין להיות צריך הוא כי ,Home תהליך את נהרוג לאמקומו: את לפנות שנבחר זה הוא Mailה־ תהליך ולכן האחרון שהוא מכיוון נהרוג, לא Browserה־

20

Page 21: Advanced Programming - Lectures

כולו: המסך על שתוצג Maps של Activityה־ בתוכו :Maps עבור חדש לתהליך מקום יש כעת

את לראות ונחזור תיסגר Maps של Activityה־ האחרונה: לאפליקציה לחזור כדי back לוחץ המשתמש כעת.Browserה־ ה־stateשל את מחדש לטעון צורך היה לא ולכן פעיל היה התהליך .Browserה־

21

Page 22: Advanced Programming - Lectures

.Mail לתהליך מקום לאפשר כדי ייהרג, Maps תהליך אפליקציה: לחזור כדי back על שוב לוחץ המשתמש כעתActivityה־ כעת .Activity Managerב־ עבורו שנשמר stateב־ יתעדכן והוא ייפתח Message של חדש עותק

עצמה: המייל הודעת את במסך ונראה תיסגר Browserה־ של

יתעדכן שלה stateה־ .Mail List של חדשה פעילות תתווסף אחורה: לחזור כדי back שוב לוחץ המשתמש כעתבמסך: המכתבים רשימת את ונראה תיסגר Messageה־ פעילות וכעת Activity Managerמה־

22

Page 23: Advanced Programming - Lectures

לאנדרואיד אפליקציה פיתוח תהליך

:Androidל־ אפליקציות מפתחי עבור כללי פיתוח לתהליך הצעה מתוארת הבא בתרשים

באנדרואיד חשובות מחלקות

23

Page 24: Advanced Programming - Lectures

מופעי של עץ הם באנדרואיד גרפיים ממשקים .GUI widgetsה־ כל עבור הבסיס מחלקת היא View מחלקתהדרך איננה זו אך (מהבסיס) שיטתית בצורה הנ"ל העץ את לבנות ניתן .GUI widgets לדוגמה המחלקות, תת"מנופח" זה וקובץ (XML GUI definition, (layout file)) XMLב־ ייצוג ע"י מוגדר כלל בדרך GUI המומלצת.

ריצה. בזמן מייצג, שהוא האובייקטים לעץ אוטומטי באופן (inflated)

מחלקה למעשה, המשתמש. ממשק שמאחורי הלוגיקה את המספקות הן שלה, המחלקות ותת Activity מחלקתActivityה־ של המחלקות תתי בין היחס לעיל. שהזכרנו MV VMה־ בתבנית V iewModelה־ חלק את מייצגת זוישנה ,Activity של מחלקה תת כל עבור כלל, בדרך לאחד. אחד היא ,GUI layout המשתמש, ממשק פריסת וביןהמצבים משלוש באחד להימצא יכולה היא בו חיים, מחזור יש Activityל־ ולהיפך. איתה המזוהה ממשק פריסת

הבאים: (state)

(Activitiesה־ מחסנית בראש טכנית: (ובצורה foregroundב־ GUIה־ כאשר ־ Active and running •

קוד. אף רץ לא זה במצב המסך. על נראה עדיין אך הפוקוס את איבד שלו GUIה־ אם ־ Paused •

קוד. אף רץ לא זה במצב המסך. על נראה אינו שלו GUIה־ אם ־ Stopped •

בתבנית המודל חלק את ומייצגות מתאימות שלה המחלקות ותת (interface) ContentProvider מחלקתלמדי, מתוחכמת שאילתות גישת עם SQLite נתונים מסד סביב עוטפת מחלקה זוהי המקרים, ברוב .MV VMתיאורטי, באופן .(i.e: file:///home/username/books/ ) Uniform resource identifier :URIב־ הנעזרתהנתונים. את לאחסן מנת על DBה־ במקום אחר במשהו להיעזר ContentProviderל־ לגרום למפתח מניעה אין(המקבילה Cursor מסוג אובייקט להחזיר האמורה ,ContentProvider של query ל־() קריאה בהינתן זאת, עם

נתונים. מסד לעטוף היא זו מחלקה של שתפקידה כך על עוררין אין , (JDBC של ResultSetל־

שמספקת ממה שונים מעט שימוש מקרי המספקת המודל, חלק של מיוחדת מחלקה היא Service מחלקת.ContentProvider

:Serviceב־ לשימוש והמוטיבציה הבעיה את נסביר ראשיתActivity של GUIש־ ברגע .foregroundב־ נמצאת היא כאשר רק ורצה פעילה Activity כי נזכיר, מוטיבציה:פעולות וביצעה פעילה הייתה היא אם אפילו לרוץ תפסיק האחרונה זאת הנוכחית, Activityה־ לפני באה אחרת

זמן. באותובעזרת זאת להשיג אפשר אי ?foregroundב־ אינו התהליך אם אף פעולה לבצע צריכים אנו אילו נעשה מה בעיה:עוד כל פעיל והוא עצמאי חיים מחזור לו אין שכן ContentProvider עם זאת לבצע אפשר אי כן וכמו ,Activity

פעילה. שייך, הוא לה Activityה־.foregroundב־ אינו לו שייך שהוא התהליך כאשר אפילו להתבצע יכול הוא הפתרון. הוא Service זה במקרה

Serviceב־ להשתמש עלינו ברקע, גם להתבצע שצריכה ארוכה פעולה ולה Activity נפתח שאם היא, מכך המסקנהשיצרנו. Activityה־ מתוך לו ולקרוא פעולה, אותה את המממש

publish/subscribe תקשורת במנגנון "מנויים" כמעין משרתות שלה המחלקות ותת BroadcastReciever מחלקתההפעלה. מערכת ארכיטקטורת ע"י הממומש (RSSל־ (בדומה

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

24

Page 25: Advanced Programming - Lectures

Android Manifest ־ הצהרה קובץ

תפקידים: מספר בעל XML קובץ זהו

(Unique ID) ייחודי הוא זה שדה האפליקציה. עבור Java Packageה־ שם את מגדיר •

Services,Activities, ContentProviders,BroadcastRecieversה־ האפליקציה: של המרכיבים את מגדיר •אותם. המגדירות המחלקות שמות הגדרת ע"י מהם, מורכבת האפליקציה אשר וכו'

האפליקציה. של רכיב איזה יאחסן תהליך איזה מגדיר •

אחרות. באפליקציות לגשת לאפליקציה שמותר APIל־ הרשאות הגדרת •

לאחור). תאימות (לשם דורשת האפליקציה אשר Android API של המינימלית הגרסה הגדרת •

אליהן. להתממשק צריכה שהאפליקציה הספריות רשימת הגדרת •

Resources ־ משאבים

או תפריטים המגדיר XML קובץ ,GUIה־ מבנה הגדרת את המציין XML קובץ כללי, קובץ להיות יכול משאבטקסטואליות. מחרוזות

כי נראה בדיקות בזמן ורק כתיב, טעויות על לעלות קשה מחרוזות. ע"י מזוהים resouces בג'אווה כלל בדרךבשם מחלקה יוצרים ,resourcesב־ משתמשות שלו שהמחלקות package מכל באנדרואיד, נטען. לא resourceה־בזמן מתגלות כתיב טעויות זו בצורה קבועים). (מחלקת final מסוג סטטיים משתנים מכילה זו מחלקה .”R”

קומפילציה.

Files ־ קבצים

(Opaque Binary Blob) OBB קבצי ,DB קבצי קבצים: של שונים סוגים במספר משתמשת אנדרואיד אפליקצייתע"י ממומשים אלו, קבצים עם שעובדים APIsה־ .cached filesו־ לאפליקציה, המקושרים file systems המייצגים

.(Activityו־ Service למחלקות אב מחלקת (שהיא Context מחלקת

11 שיעור

12 שיעור

13 שיעור

25