An Introduction to Programing Paradigm Chase Zhang May 8, 2013
Chapter 1 What is Programing Paradigm 1
CHAPTER 1. WHAT IS PROGRAMING PARADIGM 2 Definition from Wikipedia 1. Object-oriented programming/ 2. Functional programing / 3. Meta programing/
CHAPTER 1. WHAT IS PROGRAMING PARADIGM 3 Python Ruby, JavaScript C Java
Chapter 2 4
CHAPTER 2. 5 1. SmallTalk 2. C++ 3. Java 4. Python 5. Ruby 6. JavaScript 7. Objective-C 8. C#
CHAPTER 2. 6 1 // A C lang s way to do this 2 typedef struct _member { 3 char* name; 4 int sex; 5 int student_id; 6 int class_id; 7 int school_id; 8 int grade; 9 }member; 10 11 // define the functions to generate and destroy structs 12 member* create_member(); 13 void delete_member(member* m);
CHAPTER 2. 7 1 member* m = create_member(); 2 3 // It s not good to allow accessing to properties directly 4 m->sex = 12431234; 5 m->grade = 3000; 6 7 // You should uses setter functions 8 void set_member_name(member* m,char* name); 9 void set_member_sex(member* m,int name); 10 void set_member_student_id(member* m,int name); 11 void set_member_class_id(member* m,int name); 12 void set_member_grade(member* m,int name);
CHAPTER 2. 8 1 //redefine struct 2 3 typedef struct _member { 4 char* name; 5 int sex; 6 int student_id; 7 }member; 8 9 //define getter functions 10 11 char* get_member_name(member* m); 12 int get_member_sex(member* m); 13 int get_member_student_id(member* m); 14 int get_member_class_id(member* m); 15 int get_member_grade(member* m);
CHAPTER 2. 9 C 1. 2. set_member_xxx get_member_xxx 3. set_xxx get_xxx 4. member 5. 10 Let's solve these problems!
CHAPTER 2. 10 See Ruby s Way 1 class Member 2 def initialize(name,student_id) 3 # Hello everyone, I am the initializer 4 @name = name 5 @student_id = student_id 6 @sex = sex 7 end 8 9 def name=(name) 10 # do something here to make sure a valid name is given 11 @name = name 12 end 13
CHAPTER 2. 11 14 def name 15 @name # you do not need a reference to the instance here 16 end 17 end 18 19 # generate a new member, the initialize function will be called automatically 20 a_member = Member.new("Chase Zhang","0709xxxx","boy") 21 a_member.name = "Hello" 22 puts a_member.name
CHAPTER 2. 12 Why this way? 1. 1 2. 4 3. 4. 3 5.
CHAPTER 2. 13 1 class Member 2 # magics here!add only one line, you get 3 pairs of setters and getters 3 # it s the magic of metaprograming that we ll talk about later 4 attr_accessor :student_id,:name,:sex 5 def initialize(name,student_id,sex) 6 @name = name # this is a property 7 @student_id = student_id 8 @sex = sex 9 end 10 end 11 a_member = Member.new("Chase Zhang","0709xxxx","boy") 12 a_member.student_id = "01111111" 13 puts a_member.student_id # print a_member.student_id
CHAPTER 2. 14 / 1. / 2.
CHAPTER 2. 15 1 # all instances of the same class shared the functions 2 # but every instance of class is seperated 3 # the interperetor knows whose perperties to use 4 # and returns the correct value 5 6 a = Member.new("Chase Zhang","xxxxxxx","boy") 7 b = Member.new("Sean Lee","xxxxxxxx","boy") 8 9 puts a.name 10 # Chase Zhang 11 12 puts b.name 13 # Sean Lee
CHAPTER 2. 16 Ruby Python C++ / new
CHAPTER 2. 17 1 class Vec2 2 attr_accessor :x,:y 3 def initialize(x,y) 4 @x=x 5 @y=y 6 end 7 def +(v2) 8 x = @x + v2.x 9 y = @y + v2.y 10 Vec2.new(x,y) 11 end 12 end 13 v1 = Vec2.new(1,3) 14 v2 = Vec2.new(2,5) 15 v1+v2 # we get Vec2(3,8)
CHAPTER 2. 18
Chapter 3 Magics Magic 19
CHAPTER 3. MAGICS 20 1 int sort_member(const void* member1,const void* member2) 2 { 3 member* m1 = (member*) member1; 4 member* m2 = (member*) member2; 5 return strcmp(m1->name,m2->name); 6 } 7 int main(void) 8 { 9 //... 10 qsort(member_list, 11 sizeof(member_list)/sizeof(member*), 12 sort_member); 13 return 0;}
CHAPTER 3. MAGICS 21 1 # ruby 2 3 member_list.sort do x,y 4 x.name <=> y.name 5 end 6 # that s all
CHAPTER 3. MAGICS 22 C 1 void print_member_if_sex(member* m,int sex) 2 { 3 if(sex==0){ 4 printf("%s\n",m->name); 5 } 6 } 7 8 int main(int argc, const char *argv[]) 9 { 10 //... 11 int i; 12 int sex = 0; // Zero stands for boy
CHAPTER 3. MAGICS 23 13 for (i = 0; i < sizeof(member_list)/sizeof(member*); i++) { 14 print_member_if_sex(member_list[i],sex); 15 // You must past the varible sex into the function 16 } 17 return 0; 18 }
CHAPTER 3. MAGICS 24 1 sex_wanted = "boy" 2 3 member_list.each do member 4 if member.sex == sex_wanted 5 puts member.name 6 end 7 end 8 # that s all
Chapter 4 Meta 25
CHAPTER 4. META 26
CHAPTER 4. META 27 1 class Member 2 attr_accessor :student_id,:name,:sex 3 4 5 # magic >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 6 7 def self.field(sym,range) 8 # a program to program 9 define_method sym do 10 @student_id[range] 11 end 12 end 13 14 # magic <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 15
CHAPTER 4. META 28 16 def initialize(name,student_id,sex) 17 @name = name 18 @student_id = student_id 19 @sex = sex 20 # magic > 21 Member.field :school_id, 0..1 22 Member.field :grade, 2..3 23 # magic < 24 end 25 end 26 27 c = Member.new "Chase Zhang","0709xxxx","boy" 28 29 puts c.school_id # 07 30 puts c.grade # 09
CHAPTER 4. META 29 1 # before magic 2 puts 1+1 # 2 3 4 # magic >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 5 class Fixnum 6 alias :old_plus :+ # new name for plus operator 7 8 def +(value) 9 0 10 end 11 end 12 # magic <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CHAPTER 4. META 30 13 14 # after magic 15 puts 1+1 # 0
Chapter 5 Thank you and... 31
CHAPTER 5. THANK YOU AND... 32 1. Ruby 2. Dive into Python 3. Ruby Some Books Some websites 1. http://ruby.learncodethehardway.org/ 2. http://learnpythonthehardway.org/ 1. JavaScript/CoffeeScript 2. Lisp Some Languages