class "דינאמי" ב JAVA - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

class "דינאמי" ב JAVA


lompy

Recommended Posts

אני רוצה לבנות תוכנית שהאוביקטים בה לא מוגדרים מראש

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

לפי הפרמטרים האילו

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

ואז מגדירים משתנים(תז, שם...) ומתודות בתוכו שמתאימים לצרכים

בתוכנית שלי אני רוצה שהמשתמש יזין המשתנים והיא תדע לקחת אותם וליצור את ה CLASS אוטומטי

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

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

כתוב ת.ז אז ב CLASS שיפתח יכתב במקום המתאים

INT ID עד כאן החלק הלוגי

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

רגיל שאפשר לפתוח ב NOTEPAD אז חשבתי אולי אפשר לבנות איזה מסגרת כללית ואז פשוט

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

האם מה שאני רוצה לעשות אפשרי ? האם יש דרך אחרת פשוטה יותר לעשות את זה? האם הדרך שלי אפשרית?

קישור לתוכן
שתף באתרים אחרים

Java נותנת לך לעשות מה שאתה אומר, אבל ממש לא איך שאתה אומר.

קובץ class הוא קובץ בינארי שנוצר ע"י ה- Java Compiler, (להבדיל מקובץ Java שמכיל את ה- source של אותו class)

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

את מה שאתה מתאר אפשר לעשות באמצעות class סטטי רגיל, שמכיל map משם המשתנה לאובייקט שמכיל את הערך.

קישור לתוכן
שתף באתרים אחרים

מה שאתה מתאר נקרא Reflection תגגל את המושג יחד עם java ותמצא דוגמאות

המתודה

Class.forName()

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

קישור לתוכן
שתף באתרים אחרים

קודם כל תודה על התגובות

אני אבדוק את השימוש ב map, הבנתי שזה דבר חזק מאד ב java שמקל על התכנות

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

ושאלה נוספת האם שימוש ב Reflection יכול ליצר בזמן ריצה כל class מכל סוג אם איזה משתנים שאני

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

ד.א

אשמח לקבל קישורים טובים בנושא במידה ויש לכם כאלה שמורים במועדפים

או שם של ספר טוב עם נושאים מתקדמים

קישור לתוכן
שתף באתרים אחרים

מה שאתה מתאר נקרא Reflection תגגל את המושג יחד עם java ותמצא דוגמאות

המתודה

Class.forName()

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

לא בדיוק. Class.forName מחזירה לך תיאור של class שכבר קיים.

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

קישור לתוכן
שתף באתרים אחרים

קודם כל תודה על התגובות

אני אבדוק את השימוש ב map, הבנתי שזה דבר חזק מאד ב java שמקל על התכנות

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

ושאלה נוספת האם שימוש ב Reflection יכול ליצר בזמן ריצה כל class מכל סוג אם איזה משתנים שאני

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

ד.א

אשמח לקבל קישורים טובים בנושא במידה ויש לכם כאלה שמורים במועדפים

או שם של ספר טוב עם נושאים מתקדמים

אני מכיר את הנושא ב- C#

אני מניח שהפרנציפ יהיה זהה גם ב- java

הרעיון ב- reflection הוא שאתה יכול לכתוב תכנית מאוד ג'נרית שאתה לא יודע מראש מה התכנית הזאת תבצע

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

הפרמטרים יכולים להיות מאוחסנים בקובץ חיצוני או DB

יכול להיות שהקלאס שאתה הולך להפעיל אפילו לא מוכר לתכנית שלך בזמן קומפילציה

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

קישור לתוכן
שתף באתרים אחרים

אני באמת מודה לכם אבל הצלחתם קצת לבלבל אותי

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

אני אנסה לתת דוגמית מה אני מנסה ללמוד לעשות

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

נגיד יש לי בתוכנית שלי class סטודנט

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

לדוגמה לתת חתך של הסטודנטים שבעלי שם מסוים או מתחילים באות מסוימת

או שיש להם שדה מיספרי כל שהוא ואני רוצה לדעת מי גדול יותר מערך מסויים

זה מאד פשוט לעשות

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

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

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

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

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

למה שמשתמש הכניס

קישור לתוכן
שתף באתרים אחרים

סתם נתתי דוגמה,ברור שאני יכול להשתמש באקסס למה שתיארתי

מה שמעניין אותי זה ללמוד לעשות דברים ב JAVA שאני לא יודע לעשות

הגעתי לרמה מסוימת ואני רוצה להיתקדם

הנושא הספציפי של CLASS דינאמי מעניין אותי והוא יכול להיות מאד שימושי

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

קישור לתוכן
שתף באתרים אחרים

תנסה לנסח מה בדיוק הפעילות ה"דינאמית" שלך.

לצורך מסד נתונים, אין לך צורך שיהיה לך class לכל סוג של רשומה.

מספיק לך להחזיק מבנה נתונים שמתאר את השדות בכל טבלא (למשל - מערך של אובייקטים מסוג Class),

וכל רשומה יכולה להיות פשוט מערך של אובייקטים מסוג Object.

בנוסף אתה יכול להחזיק אינדקסים לאיזה שדות שאתה רוצה.

אם אני זוכר נכון, מימשתי דבר כזה בדיוק בקורס במבנה נתונים לפני 4 שנים.

קישור לתוכן
שתף באתרים אחרים

הפיתרון שלך נחמד אבל לא ניראה לי שהוא יעבוד במקרה שאני ארצה

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

בהתאם וזה לא יעזור לי בנקודה הזאת

בקיצור בלי שום קשר למה שאני מנסה לכתוב

אני ממש רוצה ללמוד איך אני יוצר class'ים תוך כדי ריצה של התוכנית

ואחר כך להישתמש בהם.

האם Reflection יענה על זה או שאני צריך משהו אחר

קישור לתוכן
שתף באתרים אחרים

אני מנסה להבין את השאלה

יש לך טבלה של סטודנטים וטבלה קורסים

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

ואתה רוצה ששני המסכים יהיו בעצם פיסית אותו מסך

זה המצב ?

קישור לתוכן
שתף באתרים אחרים

הרעיון שאתה מדבר עליו LOMPY נקרא MDA

ממליץ לך לקרוא עליו באתר של OMG.ORG

אני כרגע לומד תכנות ב יג

והפרוייקט גמר שלי מתבסס על הרעיון הזה

מדובר על רעיון שבו התוכנית מקבלת קלט המייצג מבנה נתונים מסויים (למשל הסטודנט)

ואז בונה אותו בזכרון

אחר כך אפילו ממשיך ליצור קוד כללי שלא מבוסס ממשית על שפה מסויימת

ואז ליצור קוד שניצן להריץ בקומפיילר

הדבר שאתה מדבר עליו נשמע יותר כמו השלב הראשון

יש לך לפתור שם מספר בעיות

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

אני עוד לא שמעתי על REFLECTION זה יכול לעזור מאוד גם לי

אשמח להמשיך ולעדכן

קישור לתוכן
שתף באתרים אחרים

מדובר על רעיון שבו התוכנית מקבלת קלט המייצג מבנה נתונים מסויים (למשל הסטודנט)

ואז בונה אותו בזכרון

אחר כך אפילו ממשיך ליצור קוד כללי שלא מבוסס ממשית על שפה מסויימת

ואז ליצור קוד שניצן להריץ בקומפיילר

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

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

תז מסוג INT שם מסוג סטרינג וכו והתוכנה תדע לבנות CLASS מתאים בשם STUDENT אם הפרמטרים

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...