Removing Implementation Details from C++ Class Declarations

Total Page:16

File Type:pdf, Size:1020Kb

Removing Implementation Details from C++ Class Declarations Removing Implementation Details from C++ Class Declarations Mark R. Headington Computer Science Department University of Wisconsin-La Crosse La Crosse, WI 54601 [email protected] Abstract that defines, for both the user and the implementor, the services provided by the ADT without reference to imple- Data abstraction= concept introduced at varying places in mentation details. The implementation encapsulates the the CS l/CS2/CS7 sequen~separates the properties of a concrete data representation and the program code for the data type (its values and operations) fmm the implementa- ADT operations. Client code cannot access encapsulated tion of that type. This separation of spxification fmm data except through the operations provided in the interface. implementation is achieved by encapsulating the implemen- This separation of specifkation tlom implementation yields tation so that users of the type can neither access nor be three important beneti~ influenced by the implementation details. Ideally, therefore, the specifkation should be implementation-independent, ● The user does not have to know how the abstraction The C++ class mechanism compromises information works in order to use it correctly, hiding by requiring the interface to include information-the ● The implementor is guaranteed that client code cannot private part of the class &claratio*that is needed only for compromise the correctness of the implementation. implementation pqoses. This paper describes two tech- ● Changes to the implementation do not require clients to niques for removing details of implementation structure be reprogrammed and recompiled. from the C+ class declaration and discusses the advantages and disadvantages of each, In C++, the private part of a class declaration can-and usually does-include the declarations of the 1. Introduction concrete data representation of an ADT At some point in the CS1/CS2/CS7 sequence, data abstrac- #include “bool .h” / / Declarations for tion is introduced as a tool for managing complexity in // Boolean type software systems. Data abstraction, the separation of the class Int Stack { properties of a data type from its implementation, depends public: heavily on encapsulation-the technique of minimizing Boolean IsEmpty ( ) Const; interdependencies among separately-mitten modules by Boolean IsFull ( ) const; defining strict external interfaces Nica88, Snyd86]. void Push ( int ) ; In object-oriented programming languages, data int Top ( ) const; void Popo; abstraction and encapsulation are provided by the class IntStack ( ) ; // Constructor mechanism. The class, a program representation of an private: abstract data type (ADT), encapsulates both structure (the lnt data [MAX_DEPTH] ; concrete duta representatwn of the abstract data) and int top; behavior (algorithms that implement operations on the }; abstract data). Encapsulation follows because an ADT The disadvantage is that the interface represented by such defines only the abstract properties of the type, not the a class declaration is not implementation-independent. The concrete data representation or the implementations of the declaration of Int Stack clearly discloses the data repre- associated operations, sentation- int array and a variable to keep track of the To maximize the benefits of encapsulation, the ADT top of the stack. Although the reserved word private (hen% class) is composed of two parts: the specifkxtion prevents client code from accessing the data representation and the implementation, The specification is the interface directly, encapsulation and information hiding are violated Permission to copy without fee all or part of this material is in ways this paper will discuss. Sections 2 and 3 describe granted provided that the copies are not made or distributed for the problem as it affects encapsulation and information direet commercial advantage, the ACM copyright notice and the title of the publication and Its date appear, and notice is given hiding, and Section 4 presents two programming techniques that COPYI is by permlseion of the Association of Computing for stnmgthening the separation of specitkation from Machinery.Y o COPYotherwise, or to republish, requkas a fee implementation opaque types and abstract classes. %#E??W?W#%lle TN”SA @ 1995 ACM O-89791-8!k3-x195/0003....50.5O 24 2. Encapdabn facilities to concentrate on the essentials. Infor- mation hiding makes this possible by separating In C++ classes, encapsulation is enforced, in one sense, by function tiom implementation, and should be strict access controls in the form of the private and viewed by client programmers as help rather than protect ed reserved words. Components of the class that hindrance. are private and protected are inaccessible to client code, Yet encapsulation is weakened by requiring that the At best, the visibility of an ADT’s data representation private part be located in the interface. If the implementor is a distraction whereby the user may spend time speculat- changes the ADT’s data representation, all client code must ing about further implementation details. At worst, the user be recompiled as well as relinked. This dependency is may misinterpret the data representation and make decisions inconsistent with the very notion of encapsulation. based on the misinterpretation, Here is a case in point. Stroustrup addresses this issue in Z%e C++ Program- In my CS2 course, the textbook llhmd94] proceeds ming Lunguage [Stro91]: slowly from abstraction to implementation. Students are introduced to the properties of common data struc- Why, you may ask was C++ designed in such a tures-lists, stacks, queues, sets-long before they learn way that recompilation of users of a class is how to implement them. For an assignment using queues necessary after a change to the private part? as abstractions, I gave the students the specification of a And why indeed need the private part be present character queue class (as a . h file) and the compiled in the class declaration at all? In other words, form-but not the source code-of the implementai~on since users of a class are not allowed to access (. CPP) file. The assignment involved falling a queue and the private members, why must their declarations processing the characters in certain ways. This is the be present in the header files the user is sup- header file, abridged by deleting comments: posed to read? The answer is run-time ejicien- cy. On many systems, both the compilation // Header file cqueue .h process and the sequence of operations imple- #include “bool .h” menting a function call are simpler when the size of automatic objects (objects on the stack) is const int MAX_LENG = 101; known at compile time. class CharQueue { C++ is often used for applications nx@ring efficienc public: Boolean IsEmpty ) const; compact code. Particularly in system programming, size Boolean IsFull (; const; and speed of programs can be critical. For many applica- void Enqueue char ) ; tions, however, run-time efficiency is secondary to the char Front ( ) const; modukity and pliability afforded by strong encapsulation void Dequeue ); of implementation details, Section 4 of this paper describes CharQueue ( ) ; private: how to remove details of the data representation tlom the int front; class declaration. int rear; char data [MA2_LENG ] ; 3. Information Hiding ); Related to encapsulation is the concept of information The constant MALLENG is purely au implementation detail. hiding-the suppression of implementation details that do It is needed only to tell the compiler the size of the array not affect the use of an abstraction. Even though the representing the queue. private members of a C++ class are inaccessible to client Most students used the I SFU 11 ( ) operation to code, they are visibly exposed to the user as a human. Here determine when the queue was full. But some students is Bertrand Meyer’s perspective on information hiding bypassed this operation, assuming (incorrectly) that the meye88]: maximum queue length was 101. These students ran into trouble because the implementation algorithms use a circular It is worth recalling ... that the purpose of infor- buffer in which one array element must always be left mation hiding is abstraction, not protection. We empty. The maximum queue length is therefore 100, not do not necessarily wish to prevent client pro- 101. Had the private data representation and MAX.LENG grammers from accessing secret class elements, been absent from the header file, the students would h:we but rather to relieve them from having to do so. used ISFU11 ( ) as intended. In a software project, programmers are faced with too much information, and need abstraction 25 4. Decoupling Teehniquee struct PrivateRec { int front; Given the desirability of completely decoupling an ADT’s int rear; char data [MAX_LENG ] ; specification from its implementation, there are two tech- }; niques for removing details of the concrete data representa- tion flom a C++ class declaration, In this discussion it is CharQueue :: CharQueue ( ) / / Constructor assumed that the class declaration appears in a specifkation { (. h) fde and the class implementation appears in an p = new PrivateRec; p-> front = O; implementation (. cpp) file, p->rear = O; } 4.1 Opaque Types CharQueue: : -CharQueue ( ) // Destructor An opaque type is a record (st ruct) type whose forward { delete p; declaration appears in the specification fde and whose } complete declaration is hidden away in the implementation ffle. ‘Ile private data in the class declaration consists of
Recommended publications
  • Metaclasses: Generative C++
    Metaclasses: Generative C++ Document Number: P0707 R3 Date: 2018-02-11 Reply-to: Herb Sutter ([email protected]) Audience: SG7, EWG Contents 1 Overview .............................................................................................................................................................2 2 Language: Metaclasses .......................................................................................................................................7 3 Library: Example metaclasses .......................................................................................................................... 18 4 Applying metaclasses: Qt moc and C++/WinRT .............................................................................................. 35 5 Alternatives for sourcedefinition transform syntax .................................................................................... 41 6 Alternatives for applying the transform .......................................................................................................... 43 7 FAQs ................................................................................................................................................................. 46 8 Revision history ............................................................................................................................................... 51 Major changes in R3: Switched to function-style declaration syntax per SG7 direction in Albuquerque (old: $class M new: constexpr void M(meta::type target,
    [Show full text]
  • Generic Programming
    Generic Programming July 21, 1998 A Dagstuhl Seminar on the topic of Generic Programming was held April 27– May 1, 1998, with forty seven participants from ten countries. During the meeting there were thirty seven lectures, a panel session, and several problem sessions. The outcomes of the meeting include • A collection of abstracts of the lectures, made publicly available via this booklet and a web site at http://www-ca.informatik.uni-tuebingen.de/dagstuhl/gpdag.html. • Plans for a proceedings volume of papers submitted after the seminar that present (possibly extended) discussions of the topics covered in the lectures, problem sessions, and the panel session. • A list of generic programming projects and open problems, which will be maintained publicly on the World Wide Web at http://www-ca.informatik.uni-tuebingen.de/people/musser/gp/pop/index.html http://www.cs.rpi.edu/˜musser/gp/pop/index.html. 1 Contents 1 Motivation 3 2 Standards Panel 4 3 Lectures 4 3.1 Foundations and Methodology Comparisons ........ 4 Fundamentals of Generic Programming.................. 4 Jim Dehnert and Alex Stepanov Automatic Program Specialization by Partial Evaluation........ 4 Robert Gl¨uck Evaluating Generic Programming in Practice............... 6 Mehdi Jazayeri Polytypic Programming........................... 6 Johan Jeuring Recasting Algorithms As Objects: AnAlternativetoIterators . 7 Murali Sitaraman Using Genericity to Improve OO Designs................. 8 Karsten Weihe Inheritance, Genericity, and Class Hierarchies.............. 8 Wolf Zimmermann 3.2 Programming Methodology ................... 9 Hierarchical Iterators and Algorithms................... 9 Matt Austern Generic Programming in C++: Matrix Case Study........... 9 Krzysztof Czarnecki Generative Programming: Beyond Generic Programming........ 10 Ulrich Eisenecker Generic Programming Using Adaptive and Aspect-Oriented Programming .
    [Show full text]
  • Java Application Programming Interface (API) Java Application Programming Interface (API) Is a List of All Classes That Are Part of the Java Development Kit (JDK)
    Java Application Programming Interface (API) Java application programming interface (API) is a list of all classes that are part of the Java development kit (JDK). It includes all Java packages, classes, and interfaces, along with their methods, fields, and constructors. These prewritten classes provide a tremendous amount of functionality to a programmer. A programmer should be aware of these classes and should know how to use them. A complete listing of all classes in Java API can be found at Oracle’s website: http://docs.oracle.com/javase/7/docs/api/. Please visit the above site and bookmark it for future reference. Please consult this site often, especially when you are using a new class and would like to know more about its methods and fields. If you browse through the list of packages in the API, you will observe that there are packages written for GUI programming, networking programming, managing input and output, database programming, and many more. Please browse the complete list of packages and their descriptions to see how they can be used. In order to use a class from Java API, one needs to include an import statement at the start of the program. For example, in order to use the Scanner class, which allows a program to accept input from the keyboard, one must include the following import statement: import java.util.Scanner; The above import statement allows the programmer to use any method listed in the Scanner class. Another choice for including the import statement is the wildcard option shown below: import java.util.*; This version of the import statement imports all the classes in the API’s java.util package and makes them available to the programmer.
    [Show full text]
  • A Metaobject Protocol for Fault-Tolerant CORBA Applications
    A Metaobject Protocol for Fault-Tolerant CORBA Applications Marc-Olivier Killijian*, Jean-Charles Fabre*, Juan-Carlos Ruiz-Garcia*, Shigeru Chiba** *LAAS-CNRS, 7 Avenue du Colonel Roche **Institute of Information Science and 31077 Toulouse cedex, France Electronics, University of Tsukuba, Tennodai, Tsukuba, Ibaraki 305-8573, Japan Abstract The corner stone of a fault-tolerant reflective The use of metalevel architectures for the architecture is the MOP. We thus propose a special implementation of fault-tolerant systems is today very purpose MOP to address the problems of general-purpose appealing. Nevertheless, all such fault-tolerant systems ones. We show that compile-time reflection is a good have used a general-purpose metaobject protocol (MOP) approach for developing a specialized runtime MOP. or are based on restricted reflective features of some The definition and the implementation of an object-oriented language. According to our past appropriate runtime metaobject protocol for implementing experience, we define in this paper a suitable metaobject fault tolerance into CORBA applications is the main protocol, called FT-MOP for building fault-tolerant contribution of the work reported in this paper. This systems. We explain how to realize a specialized runtime MOP, called FT-MOP (Fault Tolerance - MetaObject MOP using compile-time reflection. This MOP is CORBA Protocol), is sufficiently general to be used for other aims compliant: it enables the execution and the state evolution (mobility, adaptability, migration, security). FT-MOP of CORBA objects to be controlled and enables the fault provides a mean to attach dynamically fault tolerance tolerance metalevel to be developed as CORBA software. strategies to CORBA objects as CORBA metaobjects, enabling thus these strategies to be implemented as 1 .
    [Show full text]
  • Variable-Arity Generic Interfaces
    Variable-Arity Generic Interfaces T. Stephen Strickland, Richard Cobbe, and Matthias Felleisen College of Computer and Information Science Northeastern University Boston, MA 02115 [email protected] Abstract. Many programming languages provide variable-arity func- tions. Such functions consume a fixed number of required arguments plus an unspecified number of \rest arguments." The C++ standardiza- tion committee has recently lifted this flexibility from terms to types with the adoption of a proposal for variable-arity templates. In this paper we propose an extension of Java with variable-arity interfaces. We present some programming examples that can benefit from variable-arity generic interfaces in Java; a type-safe model of such a language; and a reduction to the core language. 1 Introduction In April of 2007 the C++ standardization committee adopted Gregor and J¨arvi's proposal [1] for variable-length type arguments in class templates, which pre- sented the idea and its implementation but did not include a formal model or soundness proof. As a result, the relevant constructs will appear in the upcom- ing C++09 draft. Demand for this feature is not limited to C++, however. David Hall submitted a request for variable-arity type parameters for classes to Sun in 2005 [2]. For an illustration of the idea, consider the remarks on first-class functions in Scala [3] from the language's homepage. There it says that \every function is a value. Scala provides a lightweight syntax for defining anonymous functions, it supports higher-order functions, it allows functions to be nested, and supports currying." To achieve this integration of objects and closures, Scala's standard library pre-defines ten interfaces (traits) for function types, which we show here in Java-like syntax: interface Function0<Result> { Result apply(); } interface Function1<Arg1,Result> { Result apply(Arg1 a1); } interface Function2<Arg1,Arg2,Result> { Result apply(Arg1 a1, Arg2 a2); } ..
    [Show full text]
  • On the Interaction of Object-Oriented Design Patterns and Programming
    On the Interaction of Object-Oriented Design Patterns and Programming Languages Gerald Baumgartner∗ Konstantin L¨aufer∗∗ Vincent F. Russo∗∗∗ ∗ Department of Computer and Information Science The Ohio State University 395 Dreese Lab., 2015 Neil Ave. Columbus, OH 43210–1277, USA [email protected] ∗∗ Department of Mathematical and Computer Sciences Loyola University Chicago 6525 N. Sheridan Rd. Chicago, IL 60626, USA [email protected] ∗∗∗ Lycos, Inc. 400–2 Totten Pond Rd. Waltham, MA 02154, USA [email protected] February 29, 1996 Abstract Design patterns are distilled from many real systems to catalog common programming practice. However, some object-oriented design patterns are distorted or overly complicated because of the lack of supporting programming language constructs or mechanisms. For this paper, we have analyzed several published design patterns looking for idiomatic ways of working around constraints of the implemen- tation language. From this analysis, we lay a groundwork of general-purpose language constructs and mechanisms that, if provided by a statically typed, object-oriented language, would better support the arXiv:1905.13674v1 [cs.PL] 31 May 2019 implementation of design patterns and, transitively, benefit the construction of many real systems. In particular, our catalog of language constructs includes subtyping separate from inheritance, lexically scoped closure objects independent of classes, and multimethod dispatch. The proposed constructs and mechanisms are not radically new, but rather are adopted from a variety of languages and programming language research and combined in a new, orthogonal manner. We argue that by describing design pat- terns in terms of the proposed constructs and mechanisms, pattern descriptions become simpler and, therefore, accessible to a larger number of language communities.
    [Show full text]
  • Generic Programming
    Generic Programming Read Ch5 1 Outline • Why do we need generic programming? • Generic class • Generic method • Java interface, generic interface • Java object type and conversion 2 Why do we need generic class? • IntNode/DoubleNode/ByteNode/LocaonNode/… • IntArrayBag/DoubleArrayBag/ByteArrayBag/LocaonBag/… • A generic class (e.g., bag, node) can be used for all the above possible bags. 3 Outline • Why do we need generic programming? • Generic class • Generic method • Java interface, generic interface • Java object type and conversion 4 Generic Class public class ArrayBag<E> implements Cloneable{ private E[ ] data; private int manyItems; public void add(E element){ //similar implementaon as in IntArrayBag} … } Use a generic class: ArrayBag<Integer> intbag = new ArrayBag<Integer>(); ArrayBag<String> strbag = new ArrayBag<String>(); intbag.add(4); strbag.add(“Hello”); 5 Something to pay aenJon -- constructor public ArrayBag(int iniJalCapacity) { if (iniJalCapacity < 0) throw new IllegalArgumentExcepJon ("The iniJalCapacity is negave: " + iniJalCapacity); data = (E[]) new Object[iniJalCapacity]; manyItems = 0; } data = new E[iniJalCapacity]; WRONG 6 Something to pay aenJon -- elements • IntArrayBag – Data contains the real value of each element • ArrayBag<E> – E[] data contains the reference to the real objects • Example • Implementaons of Equals, countOfOccurences, search, etc. for(int i=0; i<data.length;i++) if(data[i]==paramObj.data[i] … for(int i=0; i<data.length;i++) if(data[i].equals(paramObj.data[i]); … 7 Something to pay aenJon –
    [Show full text]
  • Javascript and OOP Once Upon a Time
    11/14/18 JavaScript and OOP Once upon a time . Jerry Cain CS 106AJ November 12, 2018 slides courtesy of Eric Roberts Object-Oriented Programming The most prestigious prize in computer science, the ACM Turing Award, was given in 2002 to two Norwegian computing pioneers, who jointly developed SIMULA in 1967, which was the first language to use the object-oriented paradigm. JavaScript and OOP In addition to his work in computer Kristen Nygaard science, Kristen Nygaard also took Ole Johan Dahl an active role in making sure that computers served the interests of workers, not just their employers. In 1990, Nygaard’s social activism was recognized in the form of the Norbert Wiener Award for Social and Professional Responsibility. Review: Clients and Interfaces David Parnas on Modular Development • Libraries—along with programming abstractions at many • David Parnas is Professor of Computer other levels—can be viewed from two perspectives. Code Science at Limerick University in Ireland, that uses a library is called a client. The code for the library where he directs the Software Quality itself is called the implementation. Research LaBoratory, and has also taught at universities in Germany, Canada, and the • The point at which the client and the implementation meet is United States. called the interface, which serves as both a barrier and a communication channel: • Parnas's most influential contriBution to software engineering is his groundBreaking 1972 paper "On the criteria to be used in decomposing systems into modules," which client implementation laid the foundation for modern structured programming. This paper appears in many anthologies and is available on the web at interface http://portal.acm.org/citation.cfm?id=361623 1 11/14/18 Information Hiding Thinking About Objects Our module structure is based on the decomposition criteria known as information hiding.
    [Show full text]
  • Interface Definition Language (IDL)
    An OMG® Interface Definition Language™ Publication Interface Definition Language™ Version 4.2 OMG Document Number: formal/18-01-05 Release Date: March 2018 Standard Document URL: http://www.omg.org/spec/IDL/4.2/ IPR mode: Non-Assert Copyright © 1997-2001, Electronic Data Systems Corporation Copyright © 1997-2001, Hewlett-Packard Company Copyright © 1997-2001, IBM Corporation Copyright © 1997-2001, ICON Computing Copyright © 1997-2001, i-Logix Copyright © 1997-2001, IntelliCorp Copyright © 1997-2001, Microsoft Corporation Copyright © 1997-2001, ObjectTime Limited Copyright © 1997-2001, Oracle Corporation Copyright © 1997-2001, Platinum Technology, Inc. Copyright © 1997-2001, Ptech Inc. Copyright © 1997-2001, Rational Software Corporation Copyright © 1997-2001, Reich Technologies Copyright © 1997-2001, Softeam Copyright © 1997-2001, Sterling Software Copyright © 1997-2001, Taskon A/S Copyright © 1997-2001, Unisys Corporation Copyright © 2002, Laboratoire d’Informatique Fondamentale de Lille Copyright © 2013-2017, Thales Copyright © 2013-2017, Real-Time Innovations, Inc. Copyright © 2018, Object Management Group, Inc. USE OF SPECIFICATION – TERMS, CONDITIONS & NOTICES The material in this document details an Object Management Group specification in accordance with the terms, conditions and notices set forth below. This document does not represent a commitment to implement any portion of this specification in any company's products. The information contained in this document is subject to change without notice. LICENSES The companies listed above have granted to the Object Management Group, Inc. (OMG) a nonexclusive, royalty-free, paid up, worldwide license to copy and distribute this document and to modify this document and distribute copies of the modified version. Each of the copyright holders listed above has agreed that no person shall be deemed to have infringed the copyright in the included material of any such copyright holder by reason of having used the specification set forth herein or having conformed any computer software to the specification.
    [Show full text]
  • Chapter 4: PHP Fundamentals Objectives: After Reading This Chapter You Should Be Entertained and Learned: 1
    Chapter 4: PHP Fundamentals Objectives: After reading this chapter you should be entertained and learned: 1. What is PHP? 2. The Life-cycle of the PHP. 3. Why PHP? 4. Getting Started with PHP. 5. A Bit About Variables. 6. HTML Forms. 7. Building A Simple Application. 8. Programming Languages Statements Classification. 9. Program Development Life-Cycle. 10. Structured Programming. 11. Object Oriented Programming Language. 4.1 What is PHP? PHP is what is known as a Server-Side Scripting Language - which means that it is interpreted on the web server before the webpage is sent to a web browser to be displayed. This can be seen in the expanded PHP recursive acronym PHP-Hypertext Pre-processor (Created by Rasmus Lerdorf in 1995). This diagram outlines the process of how PHP interacts with a MySQL database. Originally, it is a set of Perl scripts known as the “Personal Home Page” tools. PHP 4.0 is released in June 1998 with some OO capability. The core was rewritten in 1998 for improved performance of complex applications. The core is rewritten in 1998 by Zeev and Andi and dubbed the “Zend Engine”. The engine is introduced in mid 1999 and is released with version 4.0 in May of 2000. Version 5.0 will include version 2.0 of the Zend Engine (New object model is more powerful and intuitive, Objects will no longer be passed by value; they now will be passed by reference, and Increases performance and makes OOP more attractive). Figure 4.1 The Relationship between the PHP, the Web Browser, and the MySQL DBMS 4.2 The Life-cycle of the PHP: A person using their web browser asks for a dynamic PHP webpage, the webserver has been configured to recognise the .php extension and passes the file to the PHP interpreter which in turn passes an SQL query to the MySQL server returning results for PHP to display.
    [Show full text]
  • The Bus Interface for 32-Bit Microprocessors That
    Freescale Semiconductor, Inc. MPC60XBUSRM 1/2004 Rev. 0.1 . c n I , r o t c u d n o c i PowerPC™ Microprocessor m e S Family: e l a c The Bus Interface for 32-Bit s e Microprocessors e r F For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc... Freescale Semiconductor,Inc. F o r M o r G e o I n t f o o : r w m w a t w i o . f n r e O e n s c T a h l i e s . c P o r o m d u c t , Freescale Semiconductor, Inc. Overview 1 Signal Descriptions 2 Memory Access Protocol 3 Memory Coherency 4 . System Status Signals 5 . c n I Additional Bus Configurations 6 , r o t Direct-Store Interface 7 c u d n System Considerations 8 o c i m Processor Summary A e S e Processor Clocking Overview B l a c s Processor Upgrade Suggestions C e e r F L2 Considerations for the PowerPC 604 Processor D Coherency Action Tables E Glossary of Terms and Abbreviations GLO Index IND For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc. 1 Overview 2 Signal Descriptions 3 Memory Access Protocol 4 Memory Coherency . 5 System Status Signals . c n I 6 Additional Bus Configurations , r o t 7 Direct-Store Interface c u d n 8 System Considerations o c i m A Processor Summary e S e B Processor Clocking Overview l a c s C Processor Upgrade Suggestions e e r F D L2 Considerations for the PowerPC 604 Processor E Coherency Action Tables GLO Glossary of Terms and Abbreviations IND Index For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc.
    [Show full text]
  • Data Abstraction and Encapsulation ADT Example
    Data Abstraction and Encapsulation Definition: Data Encapsulation or Information Hiding is the concealing of the implementation details of a data object Data Abstraction from the outside world. Definition: Data Abstraction is the separation between and the specification of a data object and its implementation. Definition: A data type is a collection of objects and a set Encapsulation of operations that act on those objects. Definition: An abstract data type (ADT) is a data type that is organized in such a way that the specification of the objects and the specification of the operations on the objects is separated from the representation of the objects and the implementation of the operations. 1 2 Advantages of Data Abstraction and Data Encapsulation ADT Example ADT NaturalNumber is Simplification of software development objects: An ordered sub-range of the integers starting at zero and ending at the maximum integer (MAXINT) on the computer. Testing and Debugging functions: for all x, y belong to NaturalNumber; TRUE, FALSE belong to Boolean and where +, -, <, ==, and = are the usual integer operations Reusability Zero(): NaturalNumber ::= 0 Modifications to the representation of a data IsZero(x): Boolean ::= if (x == 0) IsZero = TRUE else IsZero = FALSE type Add(x, y): NaturalNumber ::= if (x+y <= MAXINT) Add = x + y else Add = MAXINT Equal(x, y): Boolean ::= if (x == y) Equal = TRUE else Equal = FALSE Successor(x): NaturalNumber ::= if (x == MAXINT) Successor = x else Successor = x +1 Substract(x, y): NaturalNumber ::= if (x <
    [Show full text]