הקדמה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
מבוא ל
אני מודה לכם מאד על ההקשבה,
הנכונות להשתתף בשיעור ולשאול שאלות,
ובעיקר על ההתמדה...
נותר לי רק לאחל לכם בהצלחה!
בפרויקט, במבחן, בהמשך התואר ובכלל...
אלי.
סיכום תרגולי הקורס