Alan Borning Spring 2018 (slides borrowed from Dan Grossman)

Slides:



Advertisements
Similar presentations
CSE341: Programming Languages Lecture 19 Introduction To Ruby; Dynamic OOP; "Duck Typing" Dan Grossman Fall 2011.
Advertisements

CSE341: Programming Languages Lecture 20 Blocks & Procs; Inheritance & Overriding Dan Grossman Fall 2011.
George Blank University Lecturer. CS 602 Java and the Web Object Oriented Software Development Using Java Chapter 4.
CSE341: Programming Languages Introduction To Ruby; Dynamic OOP; "Duck Typing" Alan Borning Autumn 2012 (slides borrowed from Dan Grossman)
Introduction to Ruby CSE 413 Autumn 2008 Credit: Dan Grossman, CSE341.
Recap (önemli noktaları yinelemek) from last week Paradigm Kay’s Description Intro to Objects Messages / Interconnections Information Hiding Classes Inheritance.
CSCI-383 Object-Oriented Programming & Design Lecture 13.
CSE 413 Programming Languages & Implementation Hal Perkins Autumn 2012 Late binding and dynamic dispatch (Based on CSE 341 slides by Dan Grossman) 1.
CSE 341 Programming Languages Introduction to Ruby Zach Tatlock Spring 2014.
Objects & Dynamic Dispatch CSE 413 Autumn Plan We’ve learned a great deal about functional and object-oriented programming Now,  Look at semantics.
+ Ruby and other programming Languages Ronald L. Ramos.
CSE 413 Programming Languages & Implementation Hal Perkins Autumn 2012 Introduction to Ruby (adapted from CSE 341, Dan Grossman) 1.
Ruby Duck Typing, Classes & Inheritance CSE 413 Autumn 2008.
OOP Basics Classes & Methods (c) IDMS/SQL News
CSE 374 Programming Concepts & Tools Hal Perkins Fall 2015 Lecture 20 – C++ Subclasses and Inheritance.
Programming Languages Dan Grossman 2013 Everything is an Object.
Programming Languages Dan Grossman 2013 Classes and Objects.
Programming Languages Dan Grossman 2013
CSE341: Programming Languages Lecture 21 Dynamic Dispatch Precisely, and Manually in Racket Dan Grossman Spring 2016.
Programming Languages Dan Grossman 2013
CSE341: Programming Languages Lecture 21 Dynamic Dispatch Precisely, and Manually in Racket Dan Grossman Winter 2013.
CSE341: Programming Languages Lecture 19 Introduction to Ruby and OOP
CSE341: Programming Languages Lecture 4 Records, Datatypes, Case Expressions Dan Grossman Autumn 2017.
CSE341: Programming Languages Lecture 21 Dynamic Dispatch Precisely, and Manually in Racket Dan Grossman Spring 2017.
Class 22: Inheritance CS150: Computer Science University of Virginia
CSE341: Programming Languages Lecture 4 Records, Datatypes, Case Expressions Dan Grossman Winter 2013.
Object-Oriented Programming & Design Lecture 14 Martin van Bommel
CSE341: Programming Languages Lecture 21 Dynamic Dispatch Precisely, and Manually in Racket Dan Grossman Autumn 2017.
INTRODUCTION TO OBJECT-ORIENTED PROGRAMMING (OOP) & CONCEPTS
CSE341: Programming Languages Lecture 4 Records, Datatypes, Case Expressions Dan Grossman Spring 2017.
CSE341: Programming Languages Lecture 16 Datatype-Style Programming With Lists or Structs Dan Grossman Spring 2013.
Procedural Abstraction Object-Oriented Code
CSE341: Programming Languages Lecture 16 Datatype-Style Programming With Lists or Structs Dan Grossman Spring 2017.
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Winter 2013.
CSE341: Programming Languages Ruby: Blocks & Procs; Inheritance & Overriding Alan Borning Spring 2018.
CSE341: Programming Languages Lecture 25 Subtyping for OOP; Comparing/Combining Generics and Subtyping Dan Grossman Winter 2013.
CSE341: Programming Languages Lecture 25 Subtyping for OOP; Comparing/Combining Generics and Subtyping Dan Grossman Spring 2016.
CSE341: Programming Languages Lecture 25 Subtyping for OOP; Comparing/Combining Generics and Subtyping Dan Grossman Autumn 2018.
CSE341: Programming Languages Lecture 21 Dynamic Dispatch Precisely, and Manually in Racket Dan Grossman Autumn 2018.
CSE341: Programming Languages Lecture 20 Arrays and Such, Blocks and Procs, Inheritance and Overriding Dan Grossman Autumn 2018.
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Spring 2013.
CSE341: Programming Languages Late Binding in Ruby Multiple Inheritance, Interfaces, Mixins Alan Borning Spring 2018.
CSE341: Programming Languages Lecture 4 Records, Datatypes, Case Expressions Dan Grossman Winter 2018.
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Spring 2016.
CSE341: Programming Languages Lecture 20 Arrays and Such, Blocks and Procs, Inheritance and Overriding Dan Grossman Spring 2017.
CSE341: Programming Languages Lecture 21 Dynamic Dispatch Precisely, and Manually in Racket Zach Tatlock Winter 2018.
CSE341: Programming Languages Section 9 Dynamic Dispatch Manually in Racket Zach Tatlock Winter 2018.
CSE341: Programming Languages Lecture 25 Subtyping for OOP; Comparing/Combining Generics and Subtyping Dan Grossman Autumn 2017.
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Autumn 2018.
CSE341: Programming Languages Lecture 4 Records, Datatypes, Case Expressions Dan Grossman Autumn 2018.
CSE341: Programming Languages Lecture 20 Arrays and Such, Blocks and Procs, Inheritance and Overriding Dan Grossman Spring 2013.
Support for Object-Oriented Programming
Ruby Classes.
CSE341: Programming Languages Lecture 4 Records, Datatypes, Case Expressions Dan Grossman Spring 2016.
CSE341: Programming Languages Lecture 20 Arrays and Such, Blocks and Procs, Inheritance and Overriding Dan Grossman Autumn 2017.
CSE341: Programming Languages Lecture 25 Subtyping for OOP; Comparing/Combining Generics and Subtyping Dan Grossman Spring 2017.
Dan Grossman / Eric Mullen Autumn 2017
CSE341: Programming Languages Lecture 16 Datatype-Style Programming With Lists or Structs Dan Grossman Spring 2016.
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Autumn 2017.
CSE341: Programming Languages Lecture 25 Subtyping for OOP; Comparing/Combining Generics and Subtyping Dan Grossman Spring 2013.
Introduction to Smalltalk
CSE341: Programming Languages Lecture 4 Records, Datatypes, Case Expressions Dan Grossman Spring 2019.
CSE341: Programming Languages Lecture 8 Lexical Scope and Function Closures Dan Grossman Spring 2019.
Brett Wortzman Summer 2019 Slides originally created by Dan Grossman
CSE341: Programming Languages Lecture 21 Dynamic Dispatch Precisely, and Manually in Racket Dan Grossman Spring 2019.
CSE341: Programming Languages Lecture 25 Subtyping for OOP; Comparing/Combining Generics and Subtyping Dan Grossman Spring 2019.
CSE341: Programming Languages Lecture 20 Arrays and Such, Blocks and Procs, Inheritance and Overriding Dan Grossman Spring 2019.
CSE341: Programming Languages Lecture 16 Datatype-Style Programming With Lists or Structs Dan Grossman Spring 2019.
Brett Wortzman Summer 2019 Slides originally created by Dan Grossman
Presentation transcript:

Alan Borning Spring 2018 (slides borrowed from Dan Grossman) CSE341: Programming Languages Introduction To Ruby; Dynamic OOP; "Duck Typing" Alan Borning Spring 2018 (slides borrowed from Dan Grossman)

CSE341: Programming Languages The plan Lecture materials may not recount every little language feature we use Thomas book (2nd edition, Chapters 1-9) quite readable Can skip/skim regexps and ranges Also see online library documentation [large, searchable] Focus in class will be on OOP, dynamic typing, blocks, mixins Spring 2018 CSE341: Programming Languages

CSE341: Programming Languages Logistics We will use Ruby 2.2.9 Installed on the Lab machines In any case, use a version 2 (except 2.3) of some kind (unit tests are different in 1.8.7) Assignment 7 requires the tk graphics library Installation instructions, etc. on course web page Can run programs with a REPL called irb Assignment 7 is a Ruby warmup exercise (extensions to tetris); Assignment 8 is the Ruby project Spring 2018 CSE341: Programming Languages

CSE341: Programming Languages A Bit of History Some notable examples of early object-oriented languages and systems: First object-oriented programming language: Simula I, then Simula 67, created by Ole-Johan Dahl and Kristen Nygaard at the Norwegian Computing Center in Oslo. Smalltalk: developed at Xerox Palo Alto Research Center by the Learning Research Group in the 1970's (Smalltalk-72, Smalltalk-76, Smalltalk-80) Today: mature language paradigm. Some significant examples: C++, Java, C#, Python, Ruby Spring 2018 CSE341: Programming Languages

CSE341: Programming Languages Ruby Pure object-oriented: all values are objects (even numbers) Class-based: Every object has a class that determines behavior Like Java, unlike Javascript Mixins (neither Java interfaces nor C++ multiple inheritance) Dynamically typed Convenient reflection: Run-time inspection of objects Blocks and libraries encourage lots of closure idioms Syntax and scoping rules of a "scripting language" Often many ways to say the same thing Variables "spring to life" on use Lots of support for string manipulation [we won't do this] Popular for building server-side web applications (Ruby on Rails) Spring 2018 CSE341: Programming Languages

CSE341: Programming Languages Where Ruby fits dynamically typed statically typed functional Racket Haskell object-oriented Ruby Java Historical note: Smalltalk also a dynamically typed, class-based, pure OOP language with blocks and convenient reflection Smaller just-as-powerful language Contrast Ruby's "why not add that" attitude Ruby less elegant, more widely used Dynamically typed OO helps identify OO's essence by not having to discuss types Spring 2018 CSE341: Programming Languages

CSE341: Programming Languages Defining a class [For full code details and various expression constructs, see PosRational.rb] Class PosRational # no instance variable (field) decls # just assign to @squid to create field squid def initialize (num,den=1) … @num = num @den = den end def to_s… end def add r … end Spring 2018 CSE341: Programming Languages

CSE341: Programming Languages Using a class ClassName.new(args) creates a new instance of ClassName and calls its initialize method with args Every variable holds an object (possibly the nil object) Local variables (in a method) squid Instance variables (fields) @squid Class variables (static fields) @@squid You use an object with a method call Also known as a message send Every object has a class, which determines its behavior Examples: x.m 4 x.m1.m2(y.m3) -42.abs m and m(…) are sugar for self.m and self.m(…) e1 + e2 is sugar for e1.+(e2) (really!) Spring 2018 CSE341: Programming Languages

Method / variable visibility private: only available to object itself protected: available only to code in the class or subclasses public: available to all code This is different than what the words mean in Java All instance variables and class variables are private Methods are public by default There are multiple ways to change a method's visibility Spring 2018 CSE341: Programming Languages

Some syntax / scoping gotchas You create variables (including instance variables) implicitly by assigning to them So a misspelling just creates a new variable Different instances of a class could have different fields Newlines matter Often need more syntax to put something on one line Indentation is only style (not true in some languages) Class names must be capitalized Message sends with 0 or 1 argument don't need parentheses self is a special keyword (Java's this) Spring 2018 CSE341: Programming Languages

CSE341: Programming Languages Getters and setters If you want outside access to get/set instance variables, must define methods The squid= convention allows sugar via extra spaces when using the method Shorter syntax for defining getters and setters is: Overall, requiring getters and setters is more uniform and more OO Can change the methods later without changing clients Particular form of change is subclass overriding [next lecture] def squid @squid end def squid= a @squid = a end x.squid x.squid = 42 attr_reader :squid attr_writer :squid Spring 2018 CSE341: Programming Languages

CSE341: Programming Languages Top-level Expressions at top-level are evaluated in the context of an implicit "main" object with class Object That is how a standalone program would "get started" rather than requiring an object creation and method call from within irb Top-level methods are added to Object, which makes them available everywhere Spring 2018 CSE341: Programming Languages

Class definitions are dynamic All definitions in Ruby are dynamic Example: Any code can add or remove methods on existing classes Very occasionally useful (or cute) to add your own method to the Array class for example, but it is visible to all arrays Changing a class affects even already-created instances Disastrous example: Changing Fixnum's + method Overall: A simple language definition where everything can be changed and method lookup uses instance's classes Spring 2018 CSE341: Programming Languages

CSE341: Programming Languages Duck Typing "If it walks like a duck and quacks like a duck, it's a duck" Or don't worry that it may not be a duck When writing a method you might think, "I need a Toad argument" but really you need an object with enough methods similar to Toad’s methods that your method works Embracing duck typing is always making method calls rather than assuming/testing the class of arguments Plus: More code reuse; very OO approach What messages an object receive is all that matters Minus: Almost nothing is equivalent x+x versus x*2 versus 2*x Callers may assume a lot about how callees are implemented Spring 2018 CSE341: Programming Languages

CSE341: Programming Languages Duck Typing Example def mirror_update pt pt.x = pt.x * (-1) end Natural thought: "Takes a Point object (definition not shown here), negates the x value" Makes sense, though a Point instance method more OO Closer: "Takes anything with getter and setter methods for @x instance variable and multiplies the x field by -1" Closer: "Takes anything with methods x= and x and calls x= with the result of multiplying result of x and -1 Duck typing: "Takes anything with method x= and x where result of x has a * method that can take -1. Sends result of calling x the * message with -1 and sends that result to x=" Spring 2018 CSE341: Programming Languages