Enter your Sign on user name and password.

Forgot password?
Sign In | Sign Up
Start learning today, and be successful in your academic & professional career. Start Today!

Use Chrome browser to play professor video
Justin Mui

Justin Mui

Classes: Part II

Slide Duration:

Table of Contents

I. Introduction to Ruby
Setting Up Your Environment

22m 8s

Intro
0:00
Installing Ruby
0:06
Ruby-lan.org
0:07
Three Ways of Installing Ruby
2:26
Compiling Ruby-Source Code
3:02
Third Party Tools
3:28
Other Implementations of Ruby
4:48
Windows Installation
5:21
RubyInstaller.org
5:22
Mac OSX and Linux Installation
6:13
Mac OSX and Linux Installation
6:14
Setting Up Debian/Linux
6:42
Setting Up Debian/Linux
6:43
Installing HomeBrew
6:56
HomeBrew for MAC OSX
6:57
HomeBrew Wiki
9:44
Installing HomeBrew
10:02
Setting Up Mac OSX
11:46
HomeBrew, RVM, OSX-GCC Installer, and Install Ruby 1.9.3
11:47
Ruby Version Manager (RVM)
12:11
Ruby Version Manager (RVM) Overview
12:12
Installing Ruby Version Manager (RVM): http://rvm.io
12:35
Install RVM with Ruby
14:20
Install RVM with Ruby
14:21
Install OSX-GCC-Installer
16:18
Download and Install Package for Your OSX
16:19
Install Ruby 1.9.3
17:28
Install Ruby 1.9.3
17:29
Test It Out!
18:09
rvm-help & ruby-v
18:10
Example: rvm gemset create educator
18:52
Set It As Default!
20:47
rvm Use 1.9.3@educator--default
20:48
Intro to Ruby

22m 20s

Intro
0:00
What is Ruby?
0:06
What is Ruby?
0:07
Ruby Standard Library
0:52
Who Created Ruby?
1:22
Yukihiro Matsumoto
1:23
History
2:45
The Name 'Ruby'
2:46
Ruby v0.95
3:10
Ruby v1.0
3:56
English Language Mailing List Rubytalk
4:08
ruby-forum.com & the Mailing Lists
4:27
Ruby In The West
9:51
Ruby on Rails
10:39
The Pragmatic Programmer's Guide to Ruby
11:30
rubyonrails.org
13:34
Current Ruby
14:42
Ruby 1.8.7, Ruby 1.9.3, and Ruby 2.0
14:43
Why Programmers Enjoy Ruby?
15:40
Why Programmers Enjoy Ruby?
15:41
Ruby Is An Interpreted Language
16:21
Ruby Is An Interpreted Language
16:22
What Is It Used For?
16:50
What Is It Used For?
16:51
Ruby is Object-Oriented
18:17
Example: 5.class
18:18
Example: 0.0.class
18:54
Example: true.class
19:03
Example: nil.class
19:12
Object Class
19:19
BasicObject
19:20
Example
19:52
Superclass
20:50
Fixnum → Integer → Numeric → Object
21:32
Basic Tools for Using Ruby

27m 44s

Intro
0:00
Interactive Ruby
0:08
irb: Interactive Command-Line Environment
0:09
Example
0:49
irb-v
0:50
irb-executes terminal
1:02
1.9.3-p125 > 'hi'
1:09
Live Demonstration
1:31
Why Use Interactive Ruby?
2:21
Why Use Interactive Ruby?
2:22
RDoc
3:05
RDoc
3:06
Ruby Core Documentation
3:32
Ruby Core Documentation: Example
5:30
Ruby Core Documentation: Markup
6:12
Ruby Core Documentation: Headings
7:44
Coding Example: RDoc
9:30
Why Use RDoc?
13:02
Learning Core Ruby Functions
13:03
Generating RDoc
15:31
rdoc-help # usage
15:32
Ruby Interpreter
15:57
ruby -- help
15:58
ruby [switches] [-] program [arguments]
16:16
Example: How to Run a Ruby Script
16:28
Rake
18:38
Rake Overview
18:39
Ruby Core Documentation: Rake
19:46
Coding Example: Rake
23:14
Why Was It Created?
24:30
Why Was It Created?
24:31
Lesson Summary
25:13
Lesson Summary
25:14
IDE/script Editors: MacVIM
26:24
Ruby Specifics

20m 45s

Intro
0:00
Ruby Specifics
0:06
Comments
0:51
Hashtags
1:00
Example
1:23
Multi-Line Comment
2:04
Example
3:10
RDoc Comments
4:02
When do you generate an Rdoc?
4:10
Headings and subheadings
4:24
Examples
4:48
Generating an Rdoc - example
4:50
Common Code Conventions
6:28
For every tab use two spaces indentation
7:38
Never use tabs
7:42
Common Code Conventions (Cont.)
8:18
Camel case
8:20
Snake case
9:18
Identifiers
9:44
Constants begin with CAP letter
10:00
Examples
10:10
Identifiers with Different Scoping
10:26
Global
10:34
Instance Variable
10:40
Class Variable
10:46
Examples
10:56
Reserved Keywords
12:22
Do not use reserved keywords in code
12:25
Parentheses are Sometimes Optional
13:04
Functions do not require parentheses
13:16
When in doubt, use parentheses
13:54
Examples
14:10
Newlines Are Statement Terminators
14:20
Examples
15:10
Continuation with a Period
16:20
Period means continue to next line
16:46
Multiple Statements Allowed on a Single Line
17:38
Try not to use semi-colons
17:58
Code Blocks
18:20
Use code blocks for one liners
18:28
Examples
18:40
Recommended for multiple lines
20:16
Ruby Data Types (Part 1)

29m 37s

Intro
0:00
Overview
0:10
Ruby Data Types
0:10
Numbers
0:16
Strings
0:18
Symbols
0:24
Numbers
0:30
Numeric
0:44
Float
0:50
Complex
0:56
BigDecimal
0:58
Rational
1:00
Integer (most popular) - Fixnum and Bignum
1:06
Fixnum stores 31 bits
1:18
Bignum stores larger bits
1:24
All number objects are instances of Numeric
1:28
Integer Literals
2:28
Represent whole-numbers
2:40
Examples - Different bases
2:42
Binary
3:04
Octal
3:30
Hexadecimal
3:44
Examples
4:06
Floating Point Literals
4:45
Examples
4:58
e-value can be capital or lowercase
5:30
Example
5:44
Strings
6:16
Mutable objects
6:18
Used for inserting and deleting text, searching, and replacing
6:26
String Rdoc
6:46
Definition
7:00
String Literals
8:20
Single-Quoted
8:28
Double-Quoted (most used)
8:50
Example
9:32
Escape Sequences
11:10
Newline
11:16
Tab
11:22
Double quote
11:28
Blackslash
11:36
Interpolation
11:50
Sprintf
13:48
Unicode Escaping
14:38
Example
15:50
Delimiters
16:18
Here Documents
17:18
Example
17:25
String Operators
19:58
Concatenation
20:03
Appending
20:40
String Equality
21:04
Example
21:24
Substrings
22:00
Range object (inclusive)
22:22
String Encoding
24:52
Differences between Ruby 1.8 and 1.9
24:56
Symbols
26:02
Definitions
26:04
Examples
26:46
When to use symbols
26:54
Symbols and Strings
27:42
Symbols Rdoc
28:22
Ruby Gems

25m 50s

Intro
0:00
RubyGems
0:08
What are RubyGems?
0:24
RubyGems.org
0:44
How RubyGems are used
2:06
Java's jar utility
2:50
Unix/Linux's tar utility
3:06
What is a Gem?
3:16
Definition of Gem
3:20
Version
3:34
Date
3:44
Author
3:50
Description
5:58
What Are the Uses?
4:18
Uses for Gems
4:22
Installation
5:06
How to install RubyGems
5:30
Updating to the Latest Ruby Gems
5:54
Testing
6:22
Example
6:34
Installing Rake
7:24
Example
7:46
Verifying
9:22
Example
9:56
Structure
10:56
gem.gemspec
11:30
Specification
13:40
What is in the gem?
13:42
Who made it?
13:50
Update gem version
13:58
Example
14:10
Create Our First Gem
17:20
Steps involved
17:28
RubyGems Guides
17:36
Example
20:02
Steps Review
18:56
Create Our First Gem (Cont.)
23:08
Building the gem
19:38
Example
20:00
Installing the gem
22:32
Run it
22:52
Publish it
23:04
Get Some Gems!
25:06
rake
25:14
rails
25:19
fastercsv
25:25
koala
25:37
Ruby Data Types (Part 2)

40m 24s

Intro
0:00
Ruby Data Types
0:15
Boolean
0:21
Arrays
0:27
Hashes
0:33
Range
0:37
Boolean Types
0:42
TrueClass
0:56
FalseClass
1:12
NilClass
1:18
TrueClass Examples
2:48
FalseClass Examples
3:22
Arrays
4:16
Ordered collection of objects
4:22
Can hold different objects
4:32
Starts at index 0
4:50
Array of Strings
5:50
Example
5:52
Arrays (Cont.)
6:20
Can be created using literals
6:22
Can be created using constructors
6:54
Position and indexed value
8:04
Negative Indexed Values
8:56
Shift and Unshift
10:18
Push and Pop
11:38
.delete method
12:38
Addition and Subtraction
13:32
Union and Intersection
14:48
Insert
15:52
Iteration
16:52
Arrays Rdoc
17:48
Hashes
22:08
Maps and Associative Arrays
22:44
Created using the constructor
22:56
Created using a hash literal
24:02
Stored in a hash table
25:26
Example
25:50
Accessing Key-Values
27:46
Deletion
29:48
Iteration
31:04
Hashes Rdoc
32:04
Ranges
36:40
Two dots are inclusive
36:57
Three dots are exclusive
37:16
Example
37:50
Ranges Rdoc
38:24
Objects

1h 5m 46s

Intro
0:00
Objects
0:10
Object References
1:36
Ruby Core
2:16
Example
4:30
Creating New Objects
6:00
New Method
6:08
Initialize Method
6:31
Example
7:18
Garbage Collection
9:54
Global values always reachable
10:25
Object Identity
11:08
Every object has an object identifier
11:20
Object identifier is constant and unique
11:30
Example
11:54
Object Class
12:58
Class method
13:10
Superclass method
13:28
Object Testing
14:46
is_a?
15:49
respond_to?
16:26
String and Regexp
18:10
Comparing two object instances
20:06
Example
23:30
Object Equality
25:48
Comparing objects
25:54
equal?
25:58
Popular way to test for equality
27:16
Opposite way to test for equality
27:25
Arrays
28:30
Hash
29:42
Case equality operator
30:47
Class tests
31:16
Range tests
31:48
Symbol tests
32:32
Object Conversion
33:14
Explicit conversion
33:54
Implicit conversion
35:00
Example
36:12
Object Conversion: Kernel Module
38:22
Array
38:38
Float
39:26
Integer
39:58
String
40:10
Example
40:34
Object Conversion: Coerce
42:00
Used for mixed type numeric operations
42:08
Example
43:40
Object Conversion: Boolean
47:42
Every object has a boolean value
47:44
Example
48:54
Object Copying
50:52
dup
50:58
clone
51:03
Example
51:42
Object Freezing
57:36
Object Marshaling
58:38
Save state
59:04
Load state
59:27
Example
59:32
Tainted Objects
1:01:50
taint
1:02:08
farm field
1:02:12
Untrusted Objects
1:04:06
trust
1:04:24
untrust
1:04:34
untrusted?
1:04:42
Loops

38m 54s

Intro
0:00
Loops
0:12
while and until
0:48
for and in
0:54
iterators
1:04
enumerable in objects
1:06
While-loop
1:14
Will keep going is condition is true
1:18
Until-loop
2:58
Will keep going until condition becomes true
3:06
Single Expression Loops
4:20
Compact form
4:30
Expressed as a modifier
4:42
Do-While Loop
5:52
Executes body first
6:06
Do-Until Loop
7:54
Similar to do-while loop
7:58
Using Break Inside Loops
8:54
break
8:58
For-In Loop
11:56
for-loop
12:06
var
12:34
collection
12:54
body
13:00
Examples
13:08
Examples (Cont.)
15:54
Nested loops
16:40
Numeric Iterators
18:32
upto
18:40
downto
18:42
times
18:48
Examples
20:28
External Iterators
21:00
Enumerator class
21:04
Rdoc
21:16
Enumerables in Objects
24:35
Enumerable is a mix-in
24:41
RDoc
25:24
Commonly Used Enumerables in Objects
27:01
Array
27:19
Hash
27:51
Range
28:47
Examples
29:29
Enumerables in Objects (Cont.)
31:13
File Processing
31:15
Example
31:45
Enumerables in Objects (Cont.)
33:07
collect
33:23
select
34:11
reject
34:59
inject
35:29
Strings

28m 30s

Intro
0:00
Strings
0:08
Why do you want to get familiar with strings?
1:00
String Creation
1:16
new
1:28
empty?
1:50
length or size
2:10
Example
3:12
String Manipulation
4:40
slice
4:56
square brackets [ ]
5:02
token
5:40
[fixnum]
6:52
offset and length
8:40
chaining
12:42
String Insertion
12:56
insert
12:58
positive or negative index
13:46
String Updates
15:24
[token]
15:36
Examples
16:40
chop or chop!
17:54
chomp!
18:56
gsub
20:28
String Deletion
21:38
delete
21:38
String Reversal
22:46
reverse
22:52
String Manipulation
23:16
split(pattern=$, limit)
23:22
pattern
24:10
limit
24:15
upcase or upcase!
25:28
downcase or downcase!
26:02
swapcase
26:24
Incrementing Strings
27:26
next or next!
27:32
Check Out the Other Lessons
28:00
Ruby Data Types Part 1
28:12
Regular Expressions
28:18
Regular Expressions

33m 27s

Intro
0:00
Regular Expressions
0:10
How to create a regular expression
0:48
What goes inside
1:36
Metacharacters
3:10
Bracket expressions
3:14
Quantifiers
3:18
Anchors
3:20
Metacharacters
3:30
word and non-word characters
4:04
digit and non-digit characters
4:44
hexdigit and non-hexdigit characters
4:56
whitespace and non-whitespace characters
5:08
Examples
5:24
POSIX Bracket Expressions
7:48
Non-POSIX Bracket Expressions
9:48
Bracket Expression Examples
10:58
Quantifiers
12:34
Examples
13:30
Character Properties
17:24
Similar to POSIX bracket classes
18:22
More Character Properties
18:48
Examples
19:32
Anchors
20:08
Examples
21:14
Regular Expression Matching: Regexp Object
22:40
match
22:51
Regular Expression Matching: String Object
24:14
match
24:26
Regular Expression Modifier Characters
25:14
pat
25:38
Example
26:42
Regular Expression Modifier Objects
27:14
Example
28:38
Regexp Rdoc
30:40
Arrays

14m 35s

Intro
0:00
Arrays
0:12
Creating an Array with a Block
0:50
Alternative Ways to Create an Array
3:52
Checking the Class
5:14
Iterate through the array
5:26
Call the class method
5:28
Array Shortcuts
6:38
at(index)
6:44
delete_at(index)
7:28
first(n)
8:28
last(n)
9:28
Removing Duplicates
9:58
uniq or uniq!
10:04
Sorting the Array
10:48
sort or sort!
10:54
Getting the Index
11:35
index
11:56
rindex
12:38
Multidimensional Arrays
12:56
flatten
13:33
Check Out the Earlier Lesson
14:16
Ruby Data Types Part 2
14:26
Hashes

27m 48s

Intro
0:00
Hashes
0:12
Creating Hashes
1:18
Setting a Default Value
2:24
Accessing Hashes
4:16
Accessible by keys or by values
4:28
Keys must be unique
4:36
Creating Hashes
5:16
Comma-separated list
5:42
Hash rocket
8:28
Examples
10:16
Iterating Keys and Values
11:43
each_key
12:04
each_value
14:04
Merging Hashes
16:10
merge(other_hash)
16:20
Sorting Hashes
18:46
Replacing Hashes
20:57
replace(other_hash)
21:18
Converting Hashes to Other Classes
22:04
to_a
22:22
to_s
23:22
Example
24:34
Check Out the Earlier Lesson
27:22
Ruby Data Types Part 2
27:32
Math Operations, Part 1

28m 47s

Intro
0:00
Math Objects
0:12
Numeric
0:26
Integer
0:38
Float
1:02
Fixnum
1:14
Bignum
1:56
Rational
2:04
Math
2:24
Math Operations
2:36
Example
3:14
div(numeric)
4:54
divmod(numeric)
6:30
modulo(numeric)
7:23
quo(numeric)
8:18
remainder(numeric)
9:35
Operation Precedence 1 of 3
10:35
Operation Precedence 2 of 3
13:18
Operation Precedence 3 of 3
14:28
Abbreviated Math Operations
14:54
Move the operator in front of the equal sign
15:52
Numbers
16:36
Numeric Class
17:06
Numeric Methods
18:41
ceil
18:52
floor
19:32
round
19:50
Example with Numbers
20:20
Numeric Methods (Cont.)
22:20
truncate
22:28
num.step(limit, step)
23:02
Numeric Rdoc
25:26
Math Operations, Part 2

28m 51s

Intro
0:00
Math Operations
0:12
Math Module
0:24
Rational Numbers
0:44
Complex Numbers
0:52
Prime Numbers
0:58
Matrices
1:06
Math Module
1:12
PI and E
1:32
Math Module Methods
2:47
atan2(x,y)
2:56
cos(x)
3:14
exp(x)
3:44
Examples
4:38
log(x)
5:44
log(num, base)
6:34
log10(x)
7:04
sin(x)
7:34
sqrt(x)
7:52
tan(x)
8:06
Math Functions: Part 1 of 3
8:12
Math Functions: Part 2 of 3
9:32
Math Functions: Part 3 of 3
10:19
Math Module Rdoc
11:25
Rational Numbers
13:23
How to use
14:06
Example
15:02
Mathematical Ruby Scripts (Mathn)
16:25
Example
17:28
Complex Numbers
18:26
polar
18:56
rect
19:10
Complex Number Examples
19:18
Prime Numbers
20:14
each(ubound=nil)
20:44
prime?
21:22
Example
21:58
Matrices
23:15
build(row_size, column_size=row_size)
23:44
Example
24:44
Matrix Rdoc
24:58
Dates and Times

26m 1s

Intro
0:00
Dates and Times
0:12
Time Class
0:38
Methods of the Time Class
1:43
now
1:44
at(time)
2:10
Epoch & Unix Timestamp Conversion Tools
3:19
Components of a Time
5:07
Convert Time to an Array
5:54
to_a
6:08
Creating a New Time
6:48
Time.local
7:08
Year is required
7:22
Time.utc
8:12
What should be specified
9:30
More Methods of the Time Class
10:16
strftime(string)
11:26
RDoc
12:50
Date Library
16:46
Initializing a New Date
17:08
Parsing Dates
18:28
parse(string)
18:42
Today's Date
19:19
Date.today
19:22
Tomorrow's Date
20:22
Next
20:28
Next week
21:22
Count Down
21:26
Count Up
22:37
Components of a Date
23:20
Converting to Datetime
23:48
to_datetime
24:00
Initializing a Datetime
24:24
Converting to Time
25:23
self.to_time
25:32
Methods: Part 1

31m 24s

Intro
0:00
What is a Method?
0:12
Basic Method
0:58
Return Value
4:37
return
4:46
Factorial Example
6:18
Example
8:46
Return Two Values
10:06
Set the return keyword
10:14
Collected and returned as an array
10:28
Undefining Methods
11:22
undef method_to_undefine
11:44
Example
12:32
Method Names
13:02
Begin with lowercase letter
13:16
Separate longer words with underscores
13:26
Can end with equal sign, question mark, or exclamation point
14:03
Equal sign
14:26
Method Names with Question Mark
14:44
empty?
15:24
Method Names with Exclamation Point
16:01
mutators
16:12
! means use with caution
16:46
Method Aliases
18:05
alias new_method existing_method
18:42
Operator Methods
20:00
Operators
20:02
Array Operators
20:10
Unary Operators
20:32
Binary Operators
20:40
Example
21:28
Methods and Parentheses
25:00
Optional in most cases
25:20
Required in other cases
27:13
Methods and Blocks
27:54
Associated with blocks
28:18
block_given?
28:26
yield
28:36
Example
29:24
Methods: Part 2

20m 11s

Intro
0:00
Methods with the Unary Ampersand Operator
0:14
&
0:34
Block to a Proc
0:56
Example
2:02
Proc object
3:58
Example
5:04
Methods with Default Values
5:54
Example
7:12
Methods with variable-Length Arguments
8:05
How to create it
8:36
Example
11:06
Using Hashes with Arguments
13:02
Multiple arguments
13:08
Solution
13:30
Example
14:56
Rdoc
18:12
Classes: Part I

26m 51s

Intro
0:00
Classes
0:10
Definition of a class
0:14
Class represents a container
0:32
Can be reused
0:46
Creating our First Class
1:00
Keyword class will create new class
1:06
Name must begin with capital letter
1:30
Instantiating Our First Class
2:46
New will create a new instance of class
2:58
Initializing Values
3:58
Definition of def
4:14
Instance method
5:08
Example
7:02
Defining the to_s Method
8:24
Creating a string representation class
8:34
Example
10:54
Self in the Class
12:16
Definition of self
12:26
Example
13:54
Accessor Methods
15:52
getter methods
16:22
Example
17:00
Setter Methods
18:00
Mutator methods
18:02
Example
19:46
Automating Getter and Setter Methods
21:10
Defined in the module class
21:30
attr_reader
21:54
attr_writer
22:48
attr creates getter and setter methods
23:50
Example
24:28
Notes on Ruby's Accessor Methods
25:32
Classes: Part II

26m 42s

Intro
0:00
Defining Operators
0:10
You can define arithmetic operators
0:32
Unary Operators
0:46
Let's define operators in our class!
0:56
Example
2:52
Class Methods
6:24
Examples
6:56
Opening Up the Class
9:38
Adds an additional method
9:54
Examples
11:04
Array and Hash Access Method
15:40
Use square brackets
16:02
Define your own has access method
16:08
Example
16:56
Enumerating The Values
18:40
Define the each iterator
18:40
Testing for Equality
19:36
Class Triplex
19:50
Examples
20:54
Constants
25:00
Usually defined at the top of class
25:24
Classes: Part III

53m 36s

Intro
0:00
Class Variables
0:14
Example
2:16
Ruby Glass Jar Example
8:50
Class Instance Variables
10:20
Instance variables of class objects
10:46
Advantage of class instance variables
11:18
Examples
11:30
Method Visibility
16:16
Three types of method visibility
16:26
Public methods
17:34
Private methods
17:38
Protected methods
18:04
Invoking Method Visibility
19:21
Public , Protected, and Private Visibility
19:22
Invoking Method Visibility With Arguments
21:39
Example: Invoking Method Visibility
22:12
Class Visibility
23:31
Instance and Class Variables are Private
23:32
Constants are Public
24:00
Makes Existing Class Methods Private
24:27
Makes Existing Class Methods Public
25:08
Example: Class Visibility and class GlassJar
25:43
Subclassing
27:08
Subclassing: Subclass and Superclass
27:09
Example: Subclassing
29:43
Inheritance
30:05
Inheritance
30:06
Example: Inheritance
31:25
Subclassing and Inheritance
31:34
Descendants
31:41
Ancestors
31:56
More On Descendants and Ancestors
32:08
Extending a Class
33:27
Extending a Class
33:28
Coding Example: Extending a Class
34:24
Overriding a Method
36:41
Overriding a Method
36:42
Coding Example: Overriding a Method
37:18
Modifying Methods with Chaining
38:52
Modifying Methods with Chaining
38:53
Super
39:25
Coding Example: Modifying Methods with Chaining
39:51
The Singleton Pattern
44:52
Introduction to The Singleton Pattern
44:53
Setting Up Singleton
45:28
The Instance Method
45:58
Rdoc for Singleton: Usage
46:23
Rdoc for Singleton: Implementation
47:45
Coding Example: Singleton
49:38
Modules

24m 19s

Intro
0:00
Modules
0:04
What is Modules?
0:05
Modules Examples
0:40
Modules: Mix-Ins
3:31
What is a Mix-in?
3:32
Modules: Namespace
4:07
What is a Namespace?
4:08
Why Use a Namespace?
5:13
Example of a Namespace Module
5:59
Example of Mixing in The Module Into the Global Scope
6:00
Modules: Creation
7:04
How to Create a New Module?
7:05
Modules: Usage
8:19
How to Use It?
8:20
class Poker & class Bridge
9:13
Creating Our Module as a Mix-In
9:41
Example of a Module Using Instance Methods
9:42
Coding Example
10:20
Creating Our Module as a Namespace
12:11
Implement Class Methods for the Module
12:12
Coding Example
14:56
Loading Our Module
19:46
Loading Our Module Overview
19:47
Require & Load
20:15
Coding Example: Loading Module
20:48
Lesson Summary
23:36
Loading...
This is a quick preview of the lesson. For full access, please Log In or Sign up.
For more information, please see full course syllabus of Introduction to Ruby
  • Discussion

  • Study Guides

  • Download Lecture Slides

  • Table of Contents

  • Transcription

  • Related Services

Start Learning Now

Our free lessons will get you started (Adobe Flash® required).
Get immediate access to our entire library.

Sign up for Educator.com

Membership Overview

  • Unlimited access to our entire library of courses.
  • Search and jump to exactly what you want to learn.
  • *Ask questions and get answers from the community and our teachers!
  • Practice questions with step-by-step solutions.
  • Download lesson files for programming and software training practice.
  • Track your course viewing progress.
  • Download lecture slides for taking notes.
  • Learn at your own pace... anytime, anywhere!

Classes: Part II

  • Class methods are invoked by the class itself
  • To create it, prefix the name of the method with the name of the class
  • You can define a array and hash access method using []
  • It allows you to define your own hash access in a class
  • The each method allows you to create your own iterator
  • Use yield in the each method to mimic a loop
  • Defining an == operator allows you to create your own equality operator
  • Constants are public and can be called inside and outside the class

Classes: Part II

Lecture Slides are screen-captured images of important points in the lecture. Students can download and print out these lecture slide images to do practice problems as well as take notes while watching the lecture.

  • Intro 0:00
  • Defining Operators 0:10
    • You can define arithmetic operators
    • Unary Operators
    • Let's define operators in our class!
    • Example
  • Class Methods 6:24
    • Examples
  • Opening Up the Class 9:38
    • Adds an additional method
    • Examples
  • Array and Hash Access Method 15:40
    • Use square brackets
    • Define your own has access method
    • Example
  • Enumerating The Values 18:40
    • Define the each iterator
  • Testing for Equality 19:36
    • Class Triplex
    • Examples
  • Constants 25:00
    • Usually defined at the top of class

Transcription: Classes: Part II

Welcome back to Educator.com.0000

Today's lesson is on classes; this is the second part.0002

For this lesson, the first thing we want to go over is defining operators; we've done it with methods; it's good to see it in action with classes, since this is where you would most likely be using the operators.0008

You can define all of the exact same operators.0027

Arithmetic operators: addition, subtraction, multiplication, division, modulus/remainder; unary operators--you can define the plus operator, the minus operator, and the increment and the decrement operator...0034

When I'm defining these operators...let's go over how to do it.0056

I have this class called Basket; what it does is: first, takes out initialize--you can initialize it with an Array of items; it holds a basket of items.0065

I have this method called initialize; the first parameter is just items, equal, and it's an empty Array by default; if you pass things in it, then it will instantiate this variable @items with whatever you give it.0078

Then, I have these new operators; we have an addition operator and a subtraction one.0096

It takes another object--I'm saying it's going to take this other object, this other "Basket," and it's going to take the items in this existing Basket and the ones from this new Basket, and it's going to add them together.0107

So you see, it creates this Basket.new, and you have your @items here, and it adds those with your other Basket.@items, too.0125

This is the same with the subtraction: instead, it's going to look at the items in this Basket and remove any items it sees in the Basket B.0137

To do that, we call @items, and then it says, from that parameter, to subtract any items that exist in that other Basket.0150

Let's go ahead and go through an example with this.0162

I'm going to call my terminal, my IRB, and just create the class first; I'm calling this class Basket.0166

I'm using the attribute reader, the getter method we saw in the first lesson.0181

Then, I'm going to initialize the items class, and then the next one is, we're going to look at that addition operator.0190

Here, I do my @items; that is the items that are in my current class; and then, I'm going to take that other class and add those items in, too.0216

Then, the same thing with the subtraction: I'm going to do the exact same thing, but instead, it's going to remove the items from this class.0227

There you go; I've created my class.0240

Let's first just do a basic instantiation; do a Basket.new; you will notice that it defaults to an empty Array of items.0243

That is no good for us; we actually want to set some values.0253

So, I'm going to create my Array; I'm going to put some grapes, some bananas, and some apples.0257

OK, so we've created our Basket; we have three items in here; I'm going to create another Basket, and I'm just going to point that to C.0267

For this one, I'm going to put some grapes, some apples...let's put some pineapple in there--how about that?0277

We have two Baskets now; we have three items in each one.0284

Let's go ahead and use our operator methods we just created.0290

I'm just going to call B+C; I have [grapes, bananas, apples]; I have [grapes, apples, bananas]; and we're going to put them all together in one Basket.0294

I call that, and now I have this new Basket that has six items in there.0305

Basically, using the code that we just created, we defined it, and you notice how easy it is: we just call B+C, and we've just created that method.0315

We can also use spaces; it works fine, too; it uses it normally, just like Ruby does for any of their Arrays...and String classes use that concatenate...you're doing the exact same thing now--you're defining that operator.0326

Same thing: I do B-C; now, I only get [bananas]; why is that?0340

For my first object, I have [grapes, bananas, apples]; in my second one, I also have grapes and apples in there, but I do have pineapple, but it doesn't need to worry about that.0347

But since grapes and apples are in that first Basket, it's going to remove them completely, so the only thing left in that Basket would be bananas.0359

That is how these operators work; you can define unary operators the exact same way.0366

Next, we want to look at class methods.0380

A class method is invoked by the class itself.0384

You don't have to actually instantiate any class; you don't have to call any constructor class method; you just call the class name, dot, whatever the method is, and that will create it.0392

So, this is invoked by prefixing the name of the method with the name of the class.0403

Here are some examples.0409

For the Math class, we have--we have many class methods for this--one is just Math.cos; that calls the cosine method.0412

Math.exp calls the exponent method; and then, we also have Array.new that calls the initialize value, which is an instance method from the Array.0423

But this will create the new class; so just Array.new will do that.0436

What happens now is...what I want to do is show you this class method in action.0441

Let's use a real-world example so you can see how it's defined in your class, too.0451

I have this class, Basket; first, remember: when I create this method, it's invoked by prefixing the name of the method with the name of the class.0455

This would be...you would have your class here, and then your method; this is how it's structured.0469

We're going to use that to create our method here.0480

Our method is going to add up all of the items together; it's going to create them all in a created new Basket, just like we do with the additional operator.0483

This is going to allow multiple Baskets to go in there.0492

Here is my class method: I just call define(Basket).add, and the parameter it's going to take is this asterisk sign of *Baskets.0496

It's going to take multiple Baskets, and what it's going to do is, it's going to create this new Basket.0505

In my code, I'm going to say, "OK, I'm going to create this new Array of items."0511

It's going to go through each of the Baskets, one by one; it's going to get each Basket and store all of the items in my local variable right here.0517

After it does that with all of the Baskets, we have all of these items in this local Array; then, it's going to say, "OK, I want you to flatten them; make them one Array; no multidimensional Arrays; and create a new Basket with that."0529

That is our class method at work.0547

Notice, here we are using this unique variable parameter that we discussed in our methods lesson0552

This is a variable argument parameter.0564

Otherwise, now we have our class method.0573

There is another way you could do it: if I have it already defined, I can actually add in the class method later.0578

That's what I'm going to show you right now: I call this opening up the class; this is another way to define class methods, and it adds an additional method to the existing code.0588

All you do is to call that class and just pass in that class name; so I'm going to pass in Basket.0602

This is going to do the exact same functionality as the other code; all this code is the same.0614

But notice, I didn't call Basket.at here; it just says define(add), takes a parameter called Baskets, and takes that Array of items; goes and gets all the items; and creates this new Basket.0622

This might be useful if I have a lot of these class methods; it saves you a little code--I don't have to add the class name in front of add.0638

It's good if you have existing code, and you just want it to find your class methods in it later.0649

It's probably good if I show you an example of this now.0654

Let's get the terminal here: OK, so from this example, we have our IRB terminal set up; we actually defined that basket method.0660

Instead of creating that whole thing from scratch, we can just add on to this basket method now, and create that class method.0670

All I do is just to--first clear it; it's still in memory, so--I'm using that < < that's going to allow me to put in that new class method.0679

Then, I'm going to pass Basket in here; then, I'm just going to do define_add_Baskets.0691

This is our class method; I'm going to declare the items in there, and then I'm going to call Baskets.each.0704

Then, I'm going to create my new Basket from all those items.0722

There you go: I had my existing Basket and added this new class method.0729

Now, let's see it in action; we're going to just get a couple of different Baskets.0735

Let's call one of them Fruits; I'm going to make this Basket.new; it's going to have grapes, strawberries, and almonds.0740

That is my Fruit Basket.0754

I'm going to make one of nuts: let's say I have peanuts, almonds...oh, I called it net instead of new.0756

Now, we have a Basket of that; now we have those two.0772

Now, I can just call my new class method, Basket.add, and I'm going to pass in those two Baskets.0778

We have something going on here...let's see, if I do Basket.add...undefined local variable...OK; I spelled it wrong here; I forgot that s.0803

Let me just declare that again; I'll show you where I made that mistake: here, I put Basket, but it should actually be Baskets.each.0819

This will fix that issue, and then we can continue on our way.0837

That is OK; so, we updated our class method; we still have our Fruits and our Nuts; I can just do Basket.add, Fruits, Nuts...0846

There you go; when I use my add class method, it creates this new method, and it adds them together.0859

I can also add multiple Baskets; so, let's do one--Meats--how about that?0869

I do Basket.new; let's say we have some chicken, some steak; so I have my Basket full of raw meat--it's not cooked yet.0879

Then, I can do Basket.add, put that in, and it's going to create a bigger Basket with everything in it.0894

So, we have grapes, strawberries from Fruits; almonds, peanuts from Nuts; and chicken and steak.0900

There you have it; we used this class method; we are able to use that with our other methods now, and it is still in the same scope for that class object, so we still get that benefit of keeping it simple--keeping it in the scope.0908

It's not part of any instance method, but we can still use it to simplify our code, so it's nice.0924

Next, let's look at the Array and Hash access method; this is very useful--you're not actually in an Array, but you can still use it and define it; Ruby gives you that flexibility.0941

To use it, use these square brackets; this allows you to define your own Hash access method in your class.0959

I have some code here; I just call it Triplex; it takes three values from the beginning, and then you can put that value out and manipulate it to do different things.0974

Let's go over this class; first, we have the attribute reader, so we can read the first, second, and third value from the method.0993

Then, I have this initialize method: it takes three values and creates those instance variables from them.1004

Then, here is where it gets interesting: we have that Hash access method here.1012

Here we have our Hash access method.1019

Notice, here we have the square brackets; it takes a parameter of index; so this is actually like manipulating an Array.1029

I can call the index values from it, and that is what it does; so, when I pass 0, it's going to get me that at first instance variable; 1, the at second; 2, the at third.1041

Let's see if we can take this code and show it to you.1055

Very essentially, it's going to call this triplex method, and it's going to call 0, 1, and 2, and show those values for it.1067

Let's go to our class, so you can see it.1083

Here you see the case index, (1,0), called first, (1,1) called second, (1,2) called at third.1096

Let me go over and show you the other part of that code that you just saw.1109

After this, we want to look at enumerating the values.1116

We are defining the each iterator here.1121

Since we don't have an object to loop, we can just use the yield in our method.1127

What we're going to is define that each iterator; I just called yield; it's going to get that first value, the @second, the @third.1134

Very quickly, you can see the code here: I called triplex.new(1,2,3); it calls each, and it's going to just print out those values: 1, 2, and 3.1153

The next thing we're going to look at is defining, testing for equality; so we're just defining this ==method operator here.1173

I put ... here, just for all the extra code; this is being defined below that.1185

Here I have this ==; it takes a parameter of other, which is another triplex object.1194

Here, I'm going to test for equality between these objects; if the three values are the same and they're both a Triplex object, it's going to say this is equal.1201

You can define them your own way in your own code, depending on what you're developing, but for this case, I'm going to say they have to be the same class type--that is why I put this method here.1210

This is a Triplex; I want to make sure; if it isn't, it's just going to return false--it's not equal.1224

Here we have our @first; it's going to look at these two values and make sure they're the same.1233

Make sure the second value is the same, and make sure the third value is the same.1240

Here, to test for equality, all you do is...you have your first object here--I want to show you this Triplex object--and my second one (the same value is in there); I'm going to choose this == value and test for operators; it says, "Hey, these are the same; this is true."1252

But notice, if I take this and just pass an Array in, it's going to be false, because this is an Array object, and it doesn't allow that through.1274

Plus, if I create a new one, and I put [2,1,3], that would be false; but also, if I were to just do == Triplex, and just pass [1,2,3] with the new, this would return true.1283

Let's see this code in action; let's go back to that code file we saw earlier.1305

First, we have the Hash method; we already talked about the each iterator; and then, we defined that == to test for equality.1313

The first thing I'm going to do is to run this whole class; it's going to instantiate a new object called Triplex; the first one is going to define three values, 1, 2, and 3.1334

Then, it's going to just access them, just like a Hash.1350

This first one is going to just print out 1; t1 will print out the second value, which is 2; t2 will print out the third value, which is 3.1356

Next, we're going to look at enumerating the values.1371

This is the one with the yield we're using up here.1376

That is going to print each number subsequently on one line, so it's going to be one line, 1; a new line, 2; a new line, 3.1382

Then, we're going to look at testing equality--just that code we just went through with the slides.1398

We're going to have our Triplex new value, [1,2,3]; we're going to create a new object with the exact same values.1405

It's going to--if it's ==, it's going to return true; we're going to check with different types--it should be false.1413

Then, passing it with the Triplex.new[2,1,3]--that would be false, also.1422

But, as I just showed you, we can validate that if we call Triplex.new and just do [1,2,3], and check if that returns true as we assume.1428

I'm just going to call my Ruby Triplex here, and notice we get our Hash access value [1,2,3].1445

We already defined it; now, we have our enumerating value, where we use that each method; we call that yield, [1,2,3]; and then, we're testing it for the equality, so first, we're instantiating those objects, then we test if they're equal.1456

It's going to be true; then we test that with an Array; we're going to get false; we test that with a new object, shifting the second and first value around--it should be false.1473

The last one is where we actually create a new object, and it says true there.1484

That is that; here is our new method here.1492

The last thing we want to look at is just constants.1500

We've already talked about constants in previous lessons, but you can also define them in your class, and it's very useful, because some constants are made just exclusively for that class itself--you want to define it outside in a global scope, then.1506

You want to keep things really organized, so you can create a constant in a class.1522

It's usually defined at the top of the class; that's just convention; but you can do it whatever way you want--whatever is most functional.1528

Outside the class, they must be prefixed by the name of the class; and that is very important.1535

Inside this class, if I call, I can just call 0 here, and that will get me my constant.1542

But, outside the class, I have to call this Triplex::0.1551

This will get me that constant value there.1560

For this constant, what it's actually doing is just to say that if I call Triplex::0, it's going to create for me a new object with none of the values initialized to anything other than 0--so first is going to be 0; second is going to be 0; and third is going to be 0; first, second, and third.1566

Otherwise, that is the end of this lesson on classes.1594

Hope to see you next time here at Educator.com!1599

Educator®

Please sign in for full access to this lesson.

Sign-InORCreate Account

Enter your Sign-on user name and password.

Forgot password?

Start Learning Now

Our free lessons will get you started (Adobe Flash® required).
Get immediate access to our entire library.

Sign up for Educator.com

Membership Overview

  • Unlimited access to our entire library of courses.
  • Search and jump to exactly what you want to learn.
  • *Ask questions and get answers from the community and our teachers!
  • Practice questions with step-by-step solutions.
  • Download lesson files for programming and software training practice.
  • Track your course viewing progress.
  • Download lecture slides for taking notes.

Use this form or mail us to .

For support articles click here.