Abstract Data Types II. Sufficient operations Operations on an ADT are sufficient if they meet all the requirements –They must be able to create all the.

Slides:



Advertisements
Similar presentations
The ArrayList Class and the enum Keyword
Advertisements

Purpose : To convert this string to a new character array. Return Type : char[ ] Parameters : none Declaration : public char[ ] toCharArray() Returns.
Chapter 7 Strings F To process strings using the String class, the StringBuffer class, and the StringTokenizer class. F To use the String class to process.
Ch 8. Characters and Strings Timothy Budd 2 Characters and Literals Strings Char in C++ is normally an 8-bit quantity, whereas in Java it is a 16-bit.
Chapter 7 Strings F Processing strings using the String class, the StringBuffer class, and the StringTokenizer class. F Use the String class to process.
Java Programming Strings Chapter 7.
Strings An extension of types A class that encompasses a character array and provides many useful behaviors Chapter 9 Strings are IMMUTABLE.
Composition CMSC 202. Code Reuse Effective software development relies on reusing existing code. Code reuse must be more than just copying code and changing.
Mutability SWE 332 Fall 2011 Paul Ammann. SWE 3322 Data Abstraction Operation Categories Creators Create objects of a data abstraction Producers Create.
Programming 2 CS112- Lab 2 Java
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved Immutable Objects and Classes.
Abstract Data Types II. 2 Sufficient operations Operations on an ADT are sufficient if they meet all the requirements They must be able to create all.
Chapter 9 Characters and Strings. Topics Character primitives Character Wrapper class More String Methods String Comparison String Buffer String Tokenizer.
Mutable, Immutable, and Cloneable Objects Chapter 15.
CSM-Java Programming-I Spring,2005 String Handling Lesson - 6.
23-Jun-15 Strings, Etc. Part I: String s. 2 About Strings There is a special syntax for constructing strings: "Hello" Strings, unlike most other objects,
Fundamental Programming Structures in Java: Strings.
26-Jun-15 Abstract Data Types. 2 Data types I We type data--classify it into various categories-- such as int, boolean, String, Applet A data type represents.
Abstract Data Types II. 2 Sufficient operations Operations on an ADT are sufficient if they meet all the requirements They must be able to create all.
Strings, Etc. Part I: Strings. About Strings There is a special syntax for constructing strings: "Hello" Strings, unlike most other objects, have a defined.
28-Jun-15 String and StringBuilder Part I: String.
COMPSCI 125 Spring 2005 ©TheMcGraw-Hill Companies, Inc. Permission required for reproduction or display. Odds and Ends Strings (from Chapter 9) StringTokenizer.
13-Jul-15 Abstract Data Types. 2 Data types I We type data--classify it into various categories-- such as int, boolean, String, Applet A data type represents.
Data Structures 1- Course Syllabus. 2- Introduction about Data Structures.
MIT AITI 2003 Lecture 7 Class and Object - Part I.
18-Aug-15 Air Force Institute of Technology Electrical and Computer Engineering Object-Oriented Programming in Java Topic : Objects and Classes (cont)
5-1 Data types: values, operations, and data representation. Abstract data type: values and operations only. Requirements, contract, implementation(s).
Java Methods A & AB Chapter 10 - Strings. Ch 10 Goals Understand Strings indepth Learn strategies to deal with the immutability of Strings Learn how to.
Characters The data type char represents a single character in Java. –Character values are written as a symbol: ‘a’, ‘)’, ‘%’, ‘A’, etc. –A char value.
Primitive Types Java offers a number of primitive types eg.) int, short, long double, float char A variable which is declared as a primitive type stores.
1 Object Oriented Programming Lecture II Classes, Objects, Abstract Data Types, Representation Invariants, Mutables and Immutables.
Data Structures and Algorithms -- Chapter 3 Abstract Data Types Mohamed Mustaq.
23-Oct-15 Abstract Data Types. 2 Data types A data type is characterized by: a set of values a data representation, which is common to all these values,
Strings Carol Yarbrough AP Computer Science Instructor Alabama School of Fine Arts.
Design Patterns Gang Qian Department of Computer Science University of Central Oklahoma.
String Handling StringBuffer class character class StringTokenizer class.
Strings JavaMethods An Introduction to Object-Oriented Programming Maria Litvin Gary Litvin Copyright © 2003 by Maria Litvin, Gary Litvin, and Skylight.
Strings Java Methods A & AB Object-Oriented Programming and Data Structures Maria Litvin ● Gary Litvin Copyright © 2006 by Maria Litvin, Gary Litvin, and.
Vladimir Misic: Characters and Strings1Tuesday, 9:39 AM Characters and Strings.
G51PR1 Introduction to Programming I University of Nottingham Unit 8 : Strings.
Object-Oriented Program Development Using Java: A Class-Centered Approach, Enhanced Edition.
Strings and Related Classes String and character processing Class java.lang.String Class java.lang.StringBuffer Class java.lang.Character Class java.util.StringTokenizer.
Week 2 - Friday.  What did we talk about last time?  Computing Big Oh.
17-Feb-16 String and StringBuilder Part I: String.
Introduction to Objects and Encapsulation Computer Science 4 Mr. Gerb Reference: Objective: Understand Encapsulation and abstract data types.
Defining Classes I Part B. Information hiding & encapsulation separate how to use the class from the implementation details separate how to use the class.
Mutability SWE 332 Fall 2015 Paul Ammann. SWE 3322 Data Abstraction Operation Categories Creators Create objects of a data abstraction Producers Create.
CPSC 252 ADTs and C++ Classes Page 1 Abstract data types (ADTs) An abstract data type is a user-defined data type that has: private data hidden inside.
David Evans CS201J: Engineering Software University of Virginia Computer Science Lecture 5: Implementing Data Abstractions.
Strings Chapter 7 CSCI CSCI 1302 – Strings2 Outline Introduction The String class –Constructing a String –Immutable and Canonical Strings –String.
Array, Strings and Vectors
Abstract Data Types II.
Prepared by Dr. Inayatullah Shah
EKT 472: Object Oriented Programming
String and String Buffers
Chapter 7: Strings and Characters
Object Oriented Programming
MSIS 655 Advanced Business Applications Programming
Graph API (How I Did It) 1-Jan-19.
Java – String Handling.
Lecture 4: Data Abstraction CS201j: Engineering Software
Abstract Data Types 24-Feb-19.
CS2013 Lecture 7 John Hurley Cal State LA.
Abstract Data Types II.
Object Oriented Programming
Data Structures: Abstract Data Types (ADTs)
In Java, strings are objects that belong to class java.lang.String .
Basic Mutability Paul Ammann.
Unit-2 Objects and Classes
Presentation transcript:

Abstract Data Types II

Sufficient operations Operations on an ADT are sufficient if they meet all the requirements –They must be able to create all the values and perform all the operations required by the application Remember that the application cannot directly access the internal values –They should be able to create all the values and perform all the operations required by any application in a given class of applications

Necessary operations An operation on an ADT is necessary if omitting it would fail to meet the requirements –If the application can implement an operation easily and efficiently by combining other operations, that operation is unnecessary –It’s OK to have unnecessary operations if they add significantly to the convenience of using the ADT

Convenience operations An operation is a convenience operation if it could be accomplished by some overly complex combination of other operations Convenience operations should be justified –Will it be used often? –Does it really simplify the user’s task? –Would the user expect this operation to be provided? –Is it significantly more efficient?

Necessary and sufficient operations A class should define a necessary and sufficient set of operations –Convenience operations should be justified Similarly, a class should have a necessary and sufficient data representation –In general, a class should not contain data that can be easily computed from other data in the class

Example: Strings Necessary and sufficient operators: –A constructor: public String(char[] chs) –Ways to access data: public int length() public charAt(int index) Would you be happy with just these? If you invented the String class, could you justify operations such as equals and string concatenation? Convenience operators aren’t all bad!

Types of operations (p. 113) A constructor is creates a value of the ADT from input values An accessor uses a value of the ADT to compute a value of some other type A transformer uses a value of the ADT to computer another value of the ADT –A mutative transformer changes the value of the ADT it is given –An applicative transformer takes one ADT and, without changing it, returns a new ADT

Requirements The constructors and transformers must together be able to create all legal values of the ADT The accessors must be able to extract any data needed by the application

Operations in Java Constructors can be implemented with Java constructors –A constructor’s job is to construct an object of a class in a valid state –That should be a constructor’s only job Accessors and transformers can be implemented with Java methods –Mutative transformers are typically (but not always) implemented as void methods –Sometimes they both modify an object and return it

Example: String Constructors: –"This is syntactic sugar for a constructor" –public String(char[] chs) Accessors: –public int length() –public char charAt() Transformers (applicative only): –public String substring(int i, int j) –public String concat(String that) (also +) Etc.

Immutable objects A String is immutable: it cannot be changed The String class has no mutative transformers –Operations such as string concatenation create new Strings Advantages: –Efficient (for most uses) –Easy to use and simple to understand (changing a String in one object doesn’t change it in other objects) Disadvantage: –Every call to a transformer creates a new String

Example: StringBuffer Constructors: –public StringBuffer(String s) Accessors: –public int length() –public char charAt() Transformers (applicative): –public String substring(int i, int j) Transformers (mutative): –public StringBuffer append(Object obj) Etc.

Mutable objects A StringBuffer is mutable: it can be changed The StringBuffer class has both applicative and mutative transformers Advantage: –Efficient (for doing a lot of string manipulation) Disadvantage: –Can be confusing (example coming up shortly) Operations on Strings are done by converting to StringBuffers, doing the work, and converting back

Safe use of Strings public class Person { private String name; Person(String name) { this.name = name; } } String jan = "Jan"; Person doctor = new Person(jan); String dan = "D" + jan.substring(1, 2); Person secretary = new Person(dan);

Unsafe use of StringBuffers public class Person { private StringBuffer name; Person(StringBuffer name) { this.name = name; } } StringBuffer buffer = new StringBuffer("Jan"); Person doctor = new Person(buffer); buffer.setCharAt(0, 'D'); Person secretary = new Person(buffer);

Summary A class should define a necessary and sufficient set of operations Convenience operations should be justified Operations can be classified as: –Constructors –Accessors –Transformers (applicative or mutative) Immutable objects are often preferable to mutable objects

The End