תוכנה 1 תרגול מספר 12: GUI כתיבת מחלקות גנריות בית הספר למדעי המחשב אוניברסיטת תל אביב 1

מסמכים קשורים
מבוא למדעי המחשב

PowerPoint Presentation

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

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

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

PowerPoint Presentation

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

11_2009_gui

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

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

מבוא לתכנות ב- JAVA תרגול 7

Slide 1

מבוא לתכנות ב- JAVA תרגול 11

מהוא לתכנות ב- JAVA מעבדה 3

תרגול 1

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

Slide 1

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

לנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי

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

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

פייתון

תרגול 1

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

תרגול 1

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

Slide 1

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

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint - lec9.ppt

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - 10_threads.ppt

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

Microsoft PowerPoint - rec3.ppt

תרגול 1

Microsoft PowerPoint - rec8.ppt

ייבוא וייצוא של קבצי אקסל וטקסט

HTML - Hipper Text Makeup Language

תוכנה 1 אביב תשע"ח תרגיל מספר 8 אוספים גנריים ו- framework collection הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת ה

סדנת תכנות ב C/C++

PowerPoint Presentation

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

מס' סידורי: ת.ז.: עמוד 1 מתוך 20 בחינה בתוכנה 1 סמסטר ב', מועד א',תשס"ט 5/7/2009 וולף, ליאור ליאור שפירא, נעמה מאיר, מתי שמרת הוראות )נא לקרוא!( משך ה

Slide 1

מדריך למרצים ומתרגלים 1

PowerPoint Presentation

PowerPoint Presentation

תוכן העניינים

Microsoft PowerPoint - lec9.ppt

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

1

מס' סידורי: ת.ז.: עמוד 1 מתוך 15 פתרון בחינה בתוכנה 1 סמסטר ב', מועד ב',תשע"א 140/900/11 ליאור וולף, מתי שמרת, הדס צור, אסף זריצקי הוראות (נא לקרוא!)

איטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodl

Titre du document en police Sodexo

מבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2

מסע מדע ו - מסע ברכב שטח ביבשות רחוקות

שאלהIgal : מערכים דו מימדיים רקורסיה:

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

Microsoft Word - pitaron222Java_2007.doc

מצגת של PowerPoint

WinZIP תוכנה לדחיסת קבצים ספטמבר 2007

Slide 1

תורת הקומפילציה

Slide 1

Slide 1

Data Structure Assignment no.3 תאריך הגשה: p.m. 11/09/16, 23:59 את העבודה יש להגיש בזוגות במערכת ההגשות.submission system על העבודה להיות מוגשות כקובץ

PowerPoint Presentation

תוכן העניינים

מתכונת עיצוב 3013

PowerPoint Presentation

PowerPoint Presentation

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

המשימה תרגול מס' 5: קלט-פלט במערכות הפעלה שונות יש סימונים שונים עבור ירידת שורה :)newline( ב- UNIX/Linux )Line Feed( \n ב- Windows )Carriage Return +

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

Microsoft Word - sync_LG.doc

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

מקביליות

תכנות מונחה עצמים א' – תש"ע

מדריך להתקנת Code Blocks מדריך זה נועד לתאר את תהליך התקנת התוכנה של הקורס "מבוא למחשב שפת C". בקורס נשתמש בתוכנת Code::Blocks עם תוספת )אשף( המתאימה

Slide 1

מקביליות

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

Microsoft PowerPoint - rec1.ppt

Office 365 ProPlus בחינם לסטודנטים באוניברסיטת בן גוריון בנגב הוראות סטודנטים באוניברסיטת בן גוריון בנגב יכולים להוריד ולהתקין את חבילת התוכנה Office

שאלהIgal : מערכים דו מימדיים רקורסיה:

אגף התקשוב, אוניברסיטת בר אילן קורס תוכנת מטלב ויישומיה ד"ר סמדר שץ מימוש ממשק משתמש ע"י GUIDE קורס תוכנת מטלב ויישומיה שיעור מס' 12: שימוש ב- GUIDE -

סרגל כלים ל-Outlook או לExplorer- מדריך למשתמש

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

תכנות דינמי פרק 6, סעיפים 1-6, ב- Kleinberg/Tardos סכום חלקי מרחק עריכה הרעיון: במקום להרחיב פתרון חלקי יחיד בכל צעד, נרחיב כמה פתרונות אפשריים וניקח

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

הוספת קישור לאתר אינטרנט תוכן ממשק בדיקת מטלות...3 איחוד אתרי קורסים...5 סל מחזור... 7 חידושים בפעילויות...8 תצורת קורס: כפתורים... 9 פורומים...10 שיפ

regular_expression_examples

תמליל:

תוכנה 1 תרגול מספר 12: GUI כתיבת מחלקות גנריות בית הספר למדעי המחשב אוניברסיטת תל אביב 1

2 SWT בנויה על העיקרון של publish/subscribe אלמנטים בסיסיים )Widgets( מייצרים מאזינים )Listener( אירועים )Events( שאליהם נרשמים דוגמא 1: משתמש לוחץ על כפתור, שמייצר אירוע לחיצה. מאזין שנרשם לאירוע הלחיצה של הכפתור יכול לשנות את כותרת החלון דוגמא 2: משתמש סוגר את החלון, שמייצר אירוע סגירת חלון. מאזין שנרשם לאירוע סגירת החלון פותח חלון ששואל את המשתמש אם הוא רוצה לשמור את השינויים לפני שיצא מהתכנית. ה Widgets וה- Events מוגדרים ע"י כותבי הספרייה מאזינים נכתבים ע"י כותבי האפליקציה מאפשר תגובות שונות לאירועים כתלות באפליקציה

3 SWT Widgets אבני הבניין של ממשקים גרפים מוגדרים ב org.eclipse.swt.widgets תת-טיפוסים של המחלקה האבסטרקטית Widget )קישור לתיעוד( האתר של SWT מכיל דוגמאות קצרות )snippets( לשימוש בכל Widget http://www.eclipse.org/swt/widgets/ Shell Table Menu Label Text List Button

עוד על Widgets ביצירת Widget נגדיר את ה"הורה" שלו את הסגנון שלו ההורה הוא Widget היורש מ- Composite, מה שאומר שניתן להוסיף אליו Widgets אחרים לדוגמא, כפתור שההורה שלו הוא טאב שההורה שלו הוא חלון יופיע כפתור בתוך הטאב שבחלון ה- Widget מתווסף להורה בזמן הקריאה לבנאי עבור סגנונות, קיימים קבועים במחלקה SWT

5 כפתור public class ShellWithButton1 { public static void main(string[] args) { Display display = Display.getDefault(); Shell shell = new Shell(display); shell.setlayout(new FillLayout(SWT.VERTICAL)); shell.settext("example1"); Button ok = new Button(shell, SWT.PUSH); ok.settext("push Me!"); shell.pack(); shell.open(); while (!shell.isdisposed()) { if (!display.readanddispatch()) display.sleep(); display.dispose();

6 אז מה היה לנו כאן? Display display = Display.getDefault(); מקשר בין SWT לתצוגת מערכת ההפעלה )למשל, המסך( Display Shell shell = new Shell(display); חלון. שימו לב שיצירת חלון לא פותחת אותו עדין. Shell shell.setlayout(new FillLayout(SWT.VERTICAL)); לכל Composite ניתן להוסיף layout שיגדיר כיצד Widgets מסודרים בתוכו ממלאים את ה- Composite Widgets ה- FillLayout SWT.VERTICAL ה- Widgets מסודרים בצורה אנכית לפי סדר הוספתם ללא layout לא נראה את ה- Widgets כלל

7 אז מה היה לנו כאן? shell.settext("example1"); Button ok = new Button(shell, SWT.PUSH); ok.settext("push Me!"); משתנה בהתאם לטיפוס ה-.Widget בחלון קובע את settext קובע מה כתוב על הכפתור. shell.pack(); הכותרת, בכפתור לחיצה )PUSH( גורם לאובייקט גרפי לחשב ולהתאים את גודלו, למשל בהתאם pack ל- layout, ל- Widgets שבתוכו וכו' shell.open(); פתיחת החלון

8 לולאת האירועים loop( )Event while (!shell.isdisposed ()) { if (!display.readanddispatch()) display.sleep(); display.dispose(); קוד סטנדרטי שמופיע כמעט בכל תכנית SWT כל עוד החלון הראשי של התכנית לא נסגר, טפל באירוע הבא בתור ובדוק האם קיים אירוע נוסף אם לא קיים היכנס למצב שינה עד לקבלת אירוע נוסף בסוף משחררים את כל המשאבים שהוקצו ע"י קריאה ל- dispose כאשר משחררים אלמנט גרפי, כל הצאצאים שלו גם משתחררים כאשר משחררים את,Display כל המשאבים הגרפיים משתחררים

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

10 מימוש מאזין נרשם להודעות על אירוע כיצד נדע אילו אירועים מייצר מסוג מסוים אצל ה- Widget )Event( Widget מסוים? נסתכל בתיעוד התיעוד של :Button איזה מנשק עלינו לממש?

11 טיפול באירועים במחלקה נפרדת public class ButtonHandler implements SelectionListener { public void widgetselected(selectionevent e) { if (e.getsource() instanceof Button) { Button b = (Button) e.getsource(); b.settext("thanks!"); public void widgetdefaultselected(selectionevent e){ // TODO Auto-generated method stub

12 טיפול באירועים במחלקה נפרדת Display display = Display.getDefault(); Shell shell = new Shell(display); shell.setlayout(new FillLayout(SWT.VERTICAL)); shell.settext("example2"); Button ok = new Button(shell, SWT.PUSH); ok.settext("push Me!"); ok.addselectionlistener(new ButtonHandler()); shell.pack(); shell.open(); while (!shell.isdisposed()) { if (!display.readanddispatch()) display.sleep(); display.dispose();

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

14 מחלקה פנימית public class ShellWithLabelAndTextField1 { private Label label; private Text text; public static void main(string[] args) {... public void createshell() {... המחלקה הפנימית ניגשת לשדות הפרטיים של המחלקה העוטפת public class InnerHandler implements KeyListener { public void keypressed(keyevent e) { if (e.character == SWT.CR) { label.settext(text.gettext()); text.settext(""); public void keyreleased(keyevent e) { // TODO Auto-generated method stub

15 public class ShellWithLabelAndTextField1 { private Label label; private Text text; מחלקה פנימית public static void main(string[] args) { ShellWithLabelAndTextField1 shell = new ShellWithLabelAndTextField1(); shell.createshell(); public void createshell() { Display display = new Display(); Shell shell = new Shell(display); shell.setlayout(new RowLayout(SWT.VERTICAL)); label = new Label(shell, SWT.CENTER); label.settext("type text and press [ENTER]"); text = new Text(shell, SWT.LEFT); text.addkeylistener(new InnerHandler()); // pack(), open(), while... Dispose()

16 שימוש במחלקות אנונימיות בדרך כלל נזדקק רק למאזין יחיד לכל אירוע נשתמש במחלקה לוקאלית אנונימית תזכורת: {classbody new ClassName([constructor-arguments]) יצירת מופע חדש של מחלקה ללא שם, שטרם הוגדרה, שיורשת באופן אוטומטי מ classname יצירת מופע חדש של מחלקה ללא שם, שטרם הוגדרה, שמממשת באופן אוטומטי את interfacename new InterfaceName() {classbody

17 מחלקה אנונימית public class ShellWithLabelAndTextField2 { private Label label; private Text text; public static void main(string[] args) {... public void createshell() {... text.addkeylistener(new KeyListener() { public void keypressed(keyevent e) { if (e.character == SWT.CR) { label.settext(text.gettext()); text.settext(""); public void keyreleased(keyevent e) { // TODO Auto-generated method stub ); סוגר סוגריים של המתודה addkeylistener() // pack(), open(), while... Dispose()

דוגמא נוספת לבניית GUI נתונה באתר הקורס 18 שימוש ב Adapter public class ShellWithLabelAndTextField2 { private Label label; private Text text; public static void main(string[] args) {... public void createshell() {... text.addkeylistener(new KeyAdapter() { public void keypressed(keyevent e) { if (e.character == SWT.CR) { label.settext(text.gettext()); text.settext(""); ); public class KeyAdapter implements KeyListener { @Override public void keypressed(keyevent arg0) { //do nothing @Override public void keyreleased(keyevent arg0) { // do nothing // pack(), open(), while... Dispose()

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

20 תזכורת: Generics מנגנון תחבירי המאפשר לכתוב מחלקה או מתודה כך שתעבודנה עם אובייקטים מטיפוסים שונים, תוך אכיפה של בטחון-טיפוסים בזמן קומפילציה Java Generics Tutorial http://docs.oracle.com/javase/tutorial/java/generics/index.html

21 כתיבת מחלקה גנרית מימוש של מחסנית המאחסנת אובייקטים מסוג :Integer class StackOfIntegers { private LinkedList<Integer> items = new LinkedList<Integer>(); public void push(integer item) { items.addfirst(item); public Integer pop() { return items.removefirst(); { public boolean isempty() { return items.isempty(); { גנרי של מחסנית המאחסנת אובייקטים מסוג T כלשהו: class Stack<T> { private LinkedList<T> items = new LinkedList<T>(); מימוש public void push(t item) { items.addfirst(item); { public T pop() { return items.removefirst(); { public boolean isempty() { return items.isempty(); {

22 כתיבת מחלקה גנרית כשנכתוב מחלקה גנרית, נכריז בראש המחלקה על הפרמטר שיציין את הטיפוס הגנרי )T במקרה זה(. לאחר מכן, נניח שכל הופעה של הפרמטר בקוד המחלקה תוחלף בטיפוס האקטואלי שאתו יאותחל מופע המחלקה. גנרי של מחסנית המאחסנת אובייקטים מסוג T כלשהו: class Stack<T> { private LinkedList<T> items = new LinkedList<T>(); מימוש public void push(t item) { items.addfirst(item); { public T pop() { return items.removefirst(); { public boolean isempty() { return items.isempty(); { שימושים אפשריים במחלקה הגנרית: Stack<Integer> s1 = new Stack<Integer>(); Stack<String> s2 = new Stack<String>();

23 דוגמאות לירושה של מחלקות גנריות יש לשים לב אילו פרמטרים גנריים צריך לציין בכל מחלקה מאגר מחרוזות העברת הפרמטר כארגומנט להורה\מנשק הגדרת פרמטר גנרי public class MyStringPool extends HashSet<String> עם מפתח שהוא תמיד Integer public interface IntegerKeyMap<V> extends Map<Integer, V> Map רשימה המאפשרת לשמור עבור כל איבר, בנוסף, ערך מטיפוס אחר P public interface PayloadList<E, P> extends List<E> רשימה דו-ממדית public class ArrayList2D<E> extends ArrayList<List<E>>