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