Have one to sell? Sell yours here
Core C++: A Software Engineering Approach
 
See larger image
 
Tell the Publisher!
I'd like to read this book on Kindle

Don't have a Kindle? Get your Kindle here, or download a FREE Kindle Reading App.

Core C++: A Software Engineering Approach [Paperback]

Victor Shtern (Author)
4.3 out of 5 stars  See all reviews (27 customer reviews)


Available from these sellers.



Book Description

Core January 15, 2000
This is the next C++ classic. For developers with experience in any language, Victor Shtern teaches C++ the right way: with a laser-sharp focus on software engineering, using the best object-oriented techniques. Even if you've already worked with C++, this comprehensive book shows you how to build code that is more robust, easier to maintain -- and far more valuable. Shtern has built his C++ courses, training and this book on the assumption that most C++ programmers do not take advantage of the most important elements of the object-oriented language in order to build code for easy maintenance and modification (and, therefore, longer life). Core C++ shows how to do so, applying a software engineer's methodology to every aspect of code development. Learn how to make informed decisions that lead to dramatically higher code quality, based on key criteria such as cohesion, coupling, information hiding, and encapsulation. Master C++ classes in the context of today's best software engineering practices, learning the proper use of data members, member functions, access control, messages, modifiers, encapsulation, overloading, and dynamic memory management. Shtern introduces class composition, the core technique of C++ object-oriented programming -- addressing key issues such as when to avoid inheritance. He concludes by demonstrating the best ways to use advanced C++ features such as I/O libraries and templates.

Customers Who Bought This Item Also Bought


Editorial Reviews

Amazon.com Review

Aimed at the Visual C++ newcomer, Core C++: A Software Engineering Approach provides a rich and sometimes densely packed tour of the language, with plenty of advice on the best ways to use this powerful programming language effectively. It's full to the brim with useful advice for creating and using classes effectively, and gaining an expert's understanding of the language.

The writing style and presentation of C++ in this book are outstanding. The explanations of key C++ concepts, from basic language features to class design to advanced C++ whistles and bells, are by turns colloquial, garrulous, and almost always enjoyable and understandable. While it's not uncommon for today's computer book to weigh in at over 1,000 pages, the raw word count here is quite exceptional. You're challenged repeatedly to think for yourself, and the intricacies of C++ are exposed thoroughly, from language features that are indispensable to what to avoid in your code.

You'll get pretty much everything that you need to learn C++ effectively, starting with basic keywords, data types, flow-control statements, and arrays. The guide to understanding object-oriented concepts, like coupling and cohesion, will help you design better classes. Even experienced programmers will appreciate the thorough coverage of memory-management techniques in C++ (including the five kinds of scopes for variables).

An important middle section provides a blueprint for the methods and functions that most C++ code should offer, including such methods as default and copy constructors, destructors, and overloaded assignment operators. (By following this idiom, you'll be able to write reusable C++ classes.) The book also illustrates class design with basic UML notation, excels at presenting the details of how to overload C++ operators to provide easier syntax for custom C++ classes, and provides excellent explanations of the pros and cons of composition and inheritance for getting classes to work together. A look at more advanced C++ features, like templates and exception handling, wraps things up. Along the way, you get a taste of UML notation and a thorough introduction to some of the best practices for writing C++ code effectively.

Core C++ is certainly no quick read, and, if you're in a rush to learn quickly, there are plenty of more concise treatments that are available. But, if you're ambitious and want to master the intricacies of C++ class design with some of its underlying design principles, this is an original and thorough package that offers unique strengths. --Richard Dragan

Topics covered:
  • The software crisis
  • Software project-management techniques
  • Design-quality principles
  • Introduction to the C++ language
  • A minimum C++ application explained
  • C++ data types
  • Operators and flow control
  • Arrays
  • C/C++ structures
  • Unions
  • Enumerations and bit fields
  • Memory-management techniques (including stack and heap allocation, dynamic allocation, avoiding memory leaks)
  • File I/O with and without stream classes
  • Basic C++ class design
  • Parameter passing in C++ (options and best practices)
  • Creating custom programmer-defined data types

  • Cohesion
  • Coupling
  • Data encapsulation and information hiding
  • Guidelines for C++ class design: constructors (default, conversion, and copy constructors), overloading the assignment operator, destructors
  • In-depth guide to overloading C++ operators
  • Introduction to UML class diagrams
  • Aggregation and inheritance
  • C++ class syntax
  • Inheritance vs. composition
  • Virtual methods and late binding
  • Multiple inheritance
  • Advanced operator overloading techniques
  • C++ templates and exceptions
  • Standard C++ type cast operators
  • Review of material covered
  • From the Inside Flap

    Preface

    Congratulations! You have opened one of the most useful C++ books on the market! It will teach you the strengths and weaknesses of C++, and it will do this better than any other book I have seen. And I have seen a lot of C++ books. How Is This Different from Other C++ Books?

    Of course, any author can claim that his or her book is one of the best on the market. What sets this book apart is its software engineering and maintenance perspective on writing C++ code. Very few C++ books (if any) do that.

    Why is the software engineering and maintenance approach important? The point is that C++ changed not only the way we write computer programs, it also changed the way we learn programming languages. In the "good old days," you would spend a day or two looking at the basic syntax of the language, then you would try your hand at simple programming problems. Then you would learn more-complex syntax and would tackle more-complex problems. In a week or two (or in three or four weeks for a really complex language), you would have seen it "all" and could pose as an "expert."

    It's different with C++; a very large and very complex language. Granted, it is a superset of C, and you can learn to write simple C programs (and, hence, C++ programs) very quickly. But things are different for complex programs. If the programmer does not know C++ well, a complex C++ program will not be portable; its code will be difficult to reuse, and it will be difficult to maintain.

    C++ is a great language—it was created as a general-purpose engineering language, and its design is a clear success. Today, C++ is a language of choice for business, engineering, and even real-time applications. Significant effort was spent on the design of the language, to ensure that C++ programs provide great performance, that they support dynamic memory management, and that different parts of programs could be made relatively independent. Yet in all three areas, things can potentially go wrong even with a syntactically correct and thoroughly tested C++ program:

    It can be slow—much slower—than a comparable C program.

    It can contain memory management errors that affect the program only when memory usage changes (e.g., another program is installed); these errors might crash the program or quietly produce incorrect results.

    It can contain dependencies between different parts of the program so that the maintainer has a hard time understanding the intent of the designer; a poorly written C++ program can be harder to maintain and reuse than a non-object-oriented program.

    How important is this? If you are writing a small program that will be used only for a short time, then execution speed, memory management, maintainability, and reusability may not be of great importance. All that counts is your ability to quickly produce a solution. If this solution is not satisfactory, you can cut your losses by throwing the program away and writing another one. For this, any C++ book would do (but hey, you can still buy this one and enjoy its informal style and original insights into the language and its usage).

    However, if you are working in a group, creating large applications that cannot be easily discarded and will be maintained for a long time, everything matters. The software engineering and maintenance approach I am advancing in this book is very useful and quite unique. Most books on the market do not mention these issues at all. (Just check their indexes and see for yourself.) When they do, they fail to spell out the techniques that can remedy a tough situation.

    Another important characteristic of this book is its approach to the presentation of the material. There are many books on the market that do a good job enumerating the features of the language but do a mediocre job teaching you how to use the language. This is similar to learning a natural language. If you read a French grammar book, will it enable you to speak French? I did not study French, but I did study English, and I know—reading grammar books does not help to develop language fluency. In this book, I will show you how to use and how not to use the language, especially from the point of view of reusability and future maintenance.

    Another teaching issue is that C++ features are so intertwined that it is hard to present C++ in a linear fashion, from simple to more complex. Many C++ authors do not even try. They say that these efforts "offend the intelligence of the reader." As a result, they might mention in Chapter 3 a concept that is explained only in Chapter 8, leaving the reader intimidated and frustrated.

    My approach to teaching C++ is different. I introduce topics cyclically, first as a general overview and then again at a greater depth, with bells and whistles, and nowhere will your understanding depend on material in later chapters.

    I developed my approach through years of teaching working software professionals. At Boston University Metropolitan College, most of my students hold professional jobs and come to classes in the evening in search of professional growth. I also taught numerous professional development seminars and on-site training courses. I developed great empathy for the students and their struggle with language concepts and programming techniques, and I translated this experience into a well-thought-out sequence of topics, examples, counterexamples, and recommendations. I think that my approach to teaching C++ is fairly unique, and you will benefit from it.Who This Book Is For

    This book is written for professionals who are looking for a no-nonsense presentation of practical details combined with a deep understanding of C++ subtleties.

    This book is written for you if you are looking for practical details of new technologies with a thorough discussion of their use.

    It is written for you if you have experience in other languages and are moving to C++. If you are an experienced C++ programmer, you will find this book useful and sometimes an eye-opener. If this is your first programming book (and this is perfectly all right if it is), you will be well rewarded for the effort spent on reading it.How This Book Is Organized

    I decided not to follow other authors who give you a detailed tour of their books, explaining what is covered and where. Unfamiliar terms, concepts and techniques will not make much sense to you now and will probably be quite boring. This is why I put the summary of the book into its final chapter, Chapter 19, "What We Have Learned," and you can read it if you are interested. It makes more sense there.

    Instead, let me tell you what parts of the book might be of interest to you, depending on your background and experience.

    If you are experienced in C++, Parts 3 and 4 will be most useful to you with their coverage of C++ power and programming pitfalls. If, in your initial study of C++, you were rushed to objects without building your muscle in procedural programming, memory management, and creating maintainable code, a review of Parts 1 and 2 will also be helpful (and interesting).

    If you are an experienced C programmer who wants to move on to C++, Parts 2, 3, and 4 are written for you. If you briefly review Part 1, you might find the discussion of C from the software engineering and maintenance perspective interesting.

    If you a programmer with experience in high-level languages other than C, C++, or Java, you should probably start with Part 1.

    If you are looking for an introduction to programming, you should skip Chapter 1, "Object-Oriented Approach: What's So Good About It?": It will be too abstract for you at this stage. Study the other chapters of Part 1 first, then go back to Chapter 1, and then continue with Parts 2, 3, and 4.Accessing the Source Code

    It is important to practice when you learn a language. Studying C++ without practicing it is as effective as taking a driver education course without driving: You'll learn a lot of useful things about driving, but you will not be able to drive. I strongly recommend that you experiment with the programs discussed in this book. The source code for all the listings can be found at the following site: ftp://ftp.prenhall/pub/ptr/c++_programming.w-050/core_c++Feedback

    This book was thoroughly reviewed, carefully edited, and meticulously proofread. Still, some errors might remain.

    In my drive to produce a unique book, I might have made statements that are groundless, unjustified, or plain erroneous. Or, they could be controversial and you might want to debate them.

    Please do not hesitate to contact me at the following e-mail address: shtern@bu

    For each typo or error that is pointed out to me or for each valid point regarding a discussion in the book, I promise to mention the names of the first two people who do so in the next edition of this book.


    Product Details

    • Paperback: 1280 pages
    • Publisher: Prentice Hall PTR; 1st edition (January 15, 2000)
    • Language: English
    • ISBN-10: 0130857297
    • ISBN-13: 978-0130857293
    • Product Dimensions: 9.1 x 7 x 2.2 inches
    • Shipping Weight: 3.9 pounds
    • Average Customer Review: 4.3 out of 5 stars  See all reviews (27 customer reviews)
    • Amazon Best Sellers Rank: #1,000,715 in Books (See Top 100 in Books)

    More About the Author

    Discover books, learn about writers, read author blogs, and more.

     

    Customer Reviews

    27 Reviews
    5 star:
     (19)
    4 star:
     (3)
    3 star:
     (1)
    2 star:
     (3)
    1 star:
     (1)
     
     
     
     
     
    Average Customer Review
    4.3 out of 5 stars (27 customer reviews)
     
     
     
     
    Share your thoughts with other customers:
    Most Helpful Customer Reviews

    54 of 57 people found the following review helpful:
    5.0 out of 5 stars This book is written is for those who are willing to learn, October 26, 2000
    This review is from: Core C++: A Software Engineering Approach (Paperback)
    I am the author of this book, and I would like to answer the review below. The reviewer "doer" complains that the book promises "Engineering Approach" but does not describe "compiler domain and code optimization." But the book never promised "compiler domain and code optimization." It promised what EVERY programmer and technical manager needs - software engineering. It teaches how to use C++ to build maintainable programs, avoiding unnecessary complexity. Few other C++ books aim at this.

    The reviewer charges that the book could be "half the size it is." Yes, it could. But then, Core C++ would be like hundreds of other books that quickly enumerate C++ features but do not teach coding skills. Many years of teaching and training experience taught me how to teach. I use SIMPLE language and numerous examples to explain COMPLEX things. And if it takes 1200 pages to explain things well, let it be 1200 pages and not 600.

    The reviewer complains that he did not find "finer points of the language and exquisite uses of it (e.g. idioms)" in the book. He read the book too quickly - finer points and idioms are there. In addition, the book explains techniques that are not covered in other books, such as pushing tasks from client classes to server classes, moving tasks among classes to minimize coordination, and other UNIQUE methods. They are EYE OPENERS for most programmers and managers.

    The reviewer concedes that it is "a good book" and that "it covers a lot of ground," but it gives it only two stars. This misleads those for whom the book is written - those who have patience and interest to learn this complex language and to master software engineering methods of using it.

    Help other customers find the most helpful reviews 
    Was this review helpful to you? Yes No


    11 of 12 people found the following review helpful:
    4.0 out of 5 stars Become a serious C++ programmer, November 16, 2000
    By 
    Steven Alpert (Boynton Beach, FL USA) - See all my reviews
    (REAL NAME)   
    This review is from: Core C++: A Software Engineering Approach (Paperback)
    I've been coding in C for about 10 years professionally and C++ for about 4 years. C++ is far more complex than C and it is clear that it is also far more difficult to write sensible, readable, maintainable code in C++ than in C. The value in this book is in it's mantra of good design principles that it uniformly teaches from the very first chapter onward. And please understand that you MUST use some design principles to produce effective, professional-quality C++ code. I'm quite sure that if you adopt and practice the methodology in this book, you will be a superior C++ developer. You might be surprised from what I've said that Core C++ could be a good choice for beginners as well as intermediates, but I believe it is, since it promotes good habits and starts at the beginning. For beginners, your head may start to swim when you hit the middle chapters... C++ is complex and the concepts must simmer in most heads for quite a time before they're cooked. This is a book that'll get you a high paying job.
    Help other customers find the most helpful reviews 
    Was this review helpful to you? Yes No


    7 of 7 people found the following review helpful:
    5.0 out of 5 stars Attn: To Anyone Interested in Writing Code the Right Way, May 29, 2003
    By 
    This review is from: Core C++: A Software Engineering Approach (Paperback)
    Mr. Shtern has written an excellent book which not only teaches the syntax and semantics of the language but also emphasizes writing quality, reusable code. After all, that's what OOP is about.

    I work in industry as a System Engineer working mostly on low level design that I manage using C and Assembly. Working on big projects with other programmers I get to see a lot of programming styles some are excellent and some not so good. There is much value in writing quality code. You can make life much easier on your self and others when it comes time to maintain or reuse previously written code.

    Until recently, I haven't had much incentive in learning object oriented methods (or so I thought). "Core C++" was an excellent introduction to the topic giving marvelous detail on how to use the language correctly and proficiently. The author spent a great deal of time making sure every aspect of the language is covered.

    Whether you are an experienced programmer or just starting out Core C++ gets my highest recommendation as a learning tool. However, be prepared to invest some time in reading "Core C++". I can't say that I didn't get a little frustrated with the vast amount of detail, but I knew reading through each section would be an investment in knowledge that would pay handsomely when maintaining and debugging future code. 90% of my knowledge about programming comes from the many mistakes I've made in my career. I could have used a book like this when I began writing code.

    "Core C++" does not go into specifics of the C++ standard library, so it will not be the only book you need. However, there are many pitfalls in the details of C++, and one who has no experience with C++ will be doing himself a favor by beginning with "Core C++".

    In short, I would just like to express my gratitude for a well written, well thought out book on programming.

    Help other customers find the most helpful reviews 
    Was this review helpful to you? Yes No

    Share your thoughts with other customers: Create your own review
     
     
     
    Most Recent Customer Reviews











    Only search this product's reviews



    Tags Customers Associate with This Product

     (What's this?)
    Click on a tag to find related items, discussions, and people.
     
    (2)
    (2)

    Your tags: Add your first tag
     

    Sell a Digital Version of This Book in the Kindle Store

    If you are a publisher or author and hold the digital rights to a book, you can sell a digital version of it in our Kindle Store. Learn more

    Customer Discussions

    This product's forum
    Discussion Replies Latest Post
    No discussions yet

    Ask questions, Share opinions, Gain insight
    Start a new discussion
    Topic:
    First post:
    Prompts for sign-in
     

    Search Customer Discussions
    Search all Amazon discussions
       





    Look for Similar Items by Category


    Look for Similar Items by Subject