Upload
zamora
View
47
Download
0
Embed Size (px)
DESCRIPTION
מבוא ל Groovy. תכנות מתקדם 2 89-211 תרגול מספר 12 תש"ע 2009-2010. אליהו חלסצ'י. הקדמה. Groovy היא שפת סקריפט לפלטפורמת Java שפות סקריפט מאפשרות קלות וגמישות בתכנות הן דינאמיות ולכן יש פחות הגבלות משפה רגילה מאפשרות פיתוח מהיר יותר (פחות קוד לכתוב) על חשבון זמן ריצה - interpreter - PowerPoint PPT Presentation
Citation preview
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
GroovyGroovyמבוא ל מבוא ל
אליהו חלסצ'י
89-21189-211 22תכנות מתקדם תכנות מתקדם 12תרגול מספר
2009-2010תש"ע
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
הקדמה•Groovy היא שפת סקריפט לפלטפורמת Javaשפות סקריפט מאפשרות קלות וגמישות בתכנות•הן דינאמיות ולכן יש פחות הגבלות משפה רגילה •מאפשרות פיתוח מהיר יותר )פחות קוד לכתוב(•interpreterעל חשבון זמן ריצה - • עברו בהצלחה Ruby או Pythonשפות כגון •
Javaלפלטפורמה של –Jython, JRuby
אז למה יש לנו צורך ללמוד עוד שפה??•
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
הקדמהgroovyלא צריך ללמוד שפה חדשה כדי לתכנת ב
•Jython ו JRubyנותנות הרגשה של Python ו Ruby
הן גם משתמשות בספריות הקוד שלהן...––Groovy נותנת הרגשה של Javaללא הגבלות
•Groovyמבדילה עצמה מהאחרות באמצעות התחביר שלה–Javaוהיכולת להשתמש בספריות הסטנדרטיות של –
באופן טבעי
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
הקדמהאין צורך יותר בקימפול•
dynamic typesמתאפשר שימוש ב •
תחביר עם פחות אילוצים•
Javaניתן להריץ סקריפטים בתוך אפליקציות •
•Groovy מגיעה עם interpreter ומריץ אותוbyte code את הקוד ל בזמן ריצהמפרש –
תומכת גם בקימפול הקוד לפני Scalaתזכורת: •ריצה, ולכן היא סקלבילית גם לתוכנית גדולות...
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
Javaהבדלים מ
מפורש לבאים:importלא צריך לבצע • )לפי תוכן(equals== זה •הגדרת מערך:•
במקום–יש לכתוב–
:forלולאות •במקום–הבאים אפשריים:–
• java.io.*• java.lang.*• java.math.BigDecimal• java.math.BigInteger• java.net.*• java.util.*• groovy.lang.*• groovy.util.*
int[] a = {1,2,3};
int[] a = [1,2,3[
for (int i=0; i < len; i++) {...}
for (i in 0..len-1) {...} for (i in 0..<len) {...} len.times {...}
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
Javaהבדלים מ
אופציונאליתreturnהמילה ••thisמתוך מתודה סטטית מתכוון למחלקה ברירת המחדל למתודות ולמשתני מחלקה – •
publicJava אותה המשמעות כמו ב protectedל •בינתיים לא ניתן ליצור מחלקה בתוך מחלקה•
)!(closuresאך יש תמיכה ב –
•Groovy לא בודק חתימה של throwsלמתודה לבין checkedמשום שאין הבדל מבחינתו בין –
unchecked exceptions
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
Java ולא ב Groovyקיים ב
Closuresתמיכה ב •תחביר מיוחד לרשימות ומפות•תמיכה בביטויים רגולריים כחלק מתחביר השפה•dynamic typing וב staticתמיכה גם ב •
לא צריך להצהיר על טיפוס–איטרציה פולימורפית––Switch Caseפולימורפיים
ניתן להטמיע ביטויים בתוך מחרוזות•לא צריך לשרשר מחרוזות וביטויים בעצמנו–
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
Java ולא ב Groovyקיים ב
JDKנוספו המון מתודות עזר ל •
Beansקל יותר לכתוב •–Beans הן מחלקות רגילות המשמשות כ struct getters ו setters צריך להגדיר Java beanב – לא צריך, נעשה אוטומטיתGroovy beanוב –
צריך לוודא תחילה שהאובייקט לא ifבמשפטי •nullאינו
functional programmingתמיכה ב • { )def fac)n( { n == 0 ? 1 : n * fac)n - 1לדוג' –
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
צעדים ראשוניםאתר רשמי:•
–http://groovy.codehaus.org/
הוראות התקנה:•–http://groovy.codehaus.org/Installing+Groovy
:eclipse ל plug-inהתקנת ה •–http://dist.springsource.org/release/GRECLIPSE/e3.5/
יצירת פרויקט חדש:•–Filenewproject…–GroovyGroovy projectאו ע"י–
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
צעדים ראשונים
srcnewfileניצור קובץ חדש ע"י •
myTest.groovyנקרא לו בשם •
כבר ניתן לראות ש:•...main אין צורך ב scriptב –
–Dynamically Typed
–xיכול להיות כל טיפוס
x="Hello World!"
println x
x = 1
println x
x = new java.util.Date()
println x
x = -3.149
println x
x = false
println x
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
רשימות ומפות
פעולות נפוצות•
list=[]
list.add ("Hello")
list.add ("World!")
list+=['today','is',new Date()]
println list.join(' ')
println list[0]
println list[-1]
println list.size()
list = [4, 5, 6, 6, 4, 7, 2]
println list.count(6)
println list.sort()
map=[:]
map.put ("hello", "World!")
map+=['today is':new Date(), 89:210, 'advanced':'programming']
println map['hello']
println map.hello
map[89]=211
println map[89]
println map.size()
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
closures
•Closure מזכיר מחלקה אנונימית פנימית אלא שהוא בעצם מתודה אחת הניתנת לקריאה–הוא יכול לקבל פרמטרים )כמה שנרצה(–itclosure = { param -> println("hello ${param}") }ללא פרמטרים אפשר לעשות שימוש ב –
closure.call("world!")
closure = { greeting, name -> println(greeting + name) }
closure.call("hello ", "world!")
closure = { println "hello " + it }
closure.call("world!")
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
closures
Closuresדוגמאות למעבר על אוספים באמצעות forאפשר באמצעות לולאת •אפשר באמצעות מתודות•
המקבלותeachעזר כגון closureכפרמטר
•it,כמו גם הפרמטרים יכולים להיות מכל טיפוס
)איטרציה פולימורפית(
?closure באמצעות mapכיצד נעבור על •
for(x in list){
sum+=x
}
list.each {sum+=it}
list.findAll {it>5}.each{sum+=it}
list.findAll {x -> if(x>5) sum+=x}
list.findAll {if(it>5) sum+=it}
println list.every {it>5}
println list.any {it>5}
map.each{key,val -> println "$key = $val"}
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
Dynamic Typing
קודם ראינו השמה של טיפוסים שונים לאותו ה •x
}class Movieניתן גם להניח מה יש לאובייקט, לדוגמא:•
int length
String name
}
class Book{
String name
String author
}
def myFavorite(thing){
println "my favorit "+thing.class +" is "+ thing.name
}
movie= new Movie(length:124, name:"Star Wars")
book = new Book(name:"The War of the Worlds", author:"H.G. Wells")
myFavorite(movie)
myFavorite(book)
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
Dynamic Typing
, הפרמטר לא חייב switch caseגם במבנה •להיות מטיפוס מסוים...
def x = 1.23
def result = ""
switch ( x ) {
case "foo":
result = "found foo"
// lets fall through
case "bar":
result += "bar"
case [4, 5, 6, 'inList']:
result = "list"
break
case 12..30:
result = "range"
break
case Integer:
result = "integer"
break
case Number:
result = "number"
break
default:
result = "default"
}
println result == "number"
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
ביטויים רגולריים
?Matcher ואת Patternזוכרים את •Matcher~= מחזיר מופע של •בהקשר בוליאני מחזיר אמת אם קיים מופע •
לתבנית~== בודק התאמה לתבנית•
)(matches.בעצם קורא ל –
קיימות מתודות עזר•–replaceAll–replaceFirstועוד–
str = "89211"
println str ==~ /\d+/
str = "AGCGTTCGAG GCTAGATTAA"
if (str =~ 'TT'){
println 'found a match'
}
ptrn = ~"TT"
nStr = (str =~ ptrn).replaceAll('GC')
println nStr
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
beans
מספיק לכתוב רק את המאפייניםGroovyב •
קיימים אוטומטית...getters וה settersה •
publicכאמור ברירת המחדל היא•
} class Fooדוגמא:•
// read only property
final String name = "John"
// property with public getter and protected setter
Integer amount
protected void setAmount(Integer amount) { this.amount = amount }
// dynamically typed property
def cheese
}
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
beans
:Groovyב •
class Customer {
// properties
Integer id
String name
Date date
// sample code
static void main(args) {
def customer = new Customer(id:1, name:"Bean", date:new Date())
println("Hello ${customer.name}")
println("your id is "+customer.getId())
}
}
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
beans
היינו חייביםJavaב •importלהוסיף ––Setters ו Gettersלאתחל את המאפיינים–
אחד אחד...
import java.util.Date;
public class Customer {
// properties
private Integer id;
private String name;
private Date date;
public Integer getId() {
return this.id;
}
public String getName() {
return this.name;
}
public Date getDob() {
return this.date;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setDob(Date date) {
this.date = date;
}
// sample code
public static void main(String[] args) {
Customer customer = new Customer();
customer.setId(1);
customer.setName("Bean");
customer.setDob(new Date());
System.out.println("Hello " + customer.getName());
System.out.println("your id is "+customer.getId());
}
}
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא לסיכום תרגולי הקורס
סמסטר ב':סמסטר ב':כלים שימושיים•
–Mercurial–Maven–Tomcat , Jetty
webתקשורת ו •–Sockets–Servlets, JSP
עבודה מול מסד נתונים•Hibernateע"י שכבת –
web servicesארכיטקטורות של •–Rest, Comet
כשירותJavaהרצת תוכנית •–Service ,Daemon
שפות חדשות•Scalaמבוא ל –Groovyמבוא ל –
סמסטר א':סמסטר א':Javaשפת •
Javaהיכרות עם –Javaתחביר ––Java containers
•Shared librariesכלים שימושיים•
–SVN, ANT, Junitתכנות מקבילי•
Threadsמבוא ל –Threadsנושאים מתקדמים ב –
•Event driven GUI – SWT•Design Patterns
–Creational, Structural, Behavioral
•Spring Framework גדולהDesignדוגמת •
כבר עברה לה שנה... בואו נראה מה למדנו:
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא לסיכום תרגולי הקורס
סמסטר ב':סמסטר ב':כלים שימושיים•
–Mercurial–Maven–Tomcat , Jetty
webתקשורת ו •–Sockets–Servlets, JSP
עבודה מול מסד נתונים•Hibernateע"י –
web servicesארכיטקטורות של •–Rest, Comet
כשירותJavaהרצת תוכנית •–Service ,Daemon
שפות חדשות•Scalaמבוא ל –Groovyמבוא ל –
סמסטר א':סמסטר א':Javaשפת •
Javaהיכרות עם –Javaתחביר ––Java containers
•Shared librariesכלים שימושיים•
–SVN, ANT, Junitתכנות מקבילי•
Threadsמבוא ל –Threadsנושאים מתקדמים ב –
•Event driven GUI – SWT•Design Patterns
–Creational, Structural, Behavioral
•Spring Framework גדולהDesignדוגמת •
כבר עברה לה שנה... בואו נראה מה למדנו:
אנו בהחלט יכולים להיות גאים בעצמנו על ההספק!אנו בהחלט יכולים להיות גאים בעצמנו על ההספק!
אבל האם אנו מתכנתים מתקדמים?אבל האם אנו מתכנתים מתקדמים?
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
כדי להיות מתכנתים מתקדמים:...dead lineתגישו פרויקט איכותי עד ל • ותלמדו טוב למבחן!wikiתעלו את הסיכומים ל •תכירו לעומק את השפה בה אתם מתכנתים•תהיו הראשונים ללמוד על טכנולוגיות, שפות וכלים חדשים •
ברגע שהם רואים אורתשכילו להשתמש בכלים, בשפות התכנות ובספריות הקוד •
שהכי מתאימים לעבודה הנדרשת )גמיש( לפני שתחשבו על קודdesignתחשבו על •תממשו את בדיקת הקוד לפני כתיבתו...•תזכרו שאתם לא מתכנתים לבד בפרויקט...•תתרמו לפרויקט קוד פתוח!!•תצברו ניסיוןהכי חשוב: •תארו את הניסיון שלכם בבלוג ;-(•
סיכום תרגולי הקורס
הקדמהJavaהבדלים מ
צעדים ראשוניםדוגמאות קוד
סיכום תרגולי הקורס...
– תרגול 2 תכנות מתקדם 89-21112
מבוא ל
אני מודה לכם מאד על ההקשבה,
הנכונות להשתתף בשיעור ולשאול שאלות,
ובעיקר על ההתמדה...
נותר לי רק לאחל לכם בהצלחה!
בפרויקט, במבחן, בהמשך התואר ובכלל...
אלי.
סיכום תרגולי הקורס